iOS 9上静态UITableViewCell中的多行UILabel

4

我正在尝试使静态单元格中的UILabel根据其内容(这些内容会发生变化)多行显示。

viewDidLoad方法中,我有初始化标签文本的代码,紧接着是:

cellLabel.text = "Here is some text, but because of how long it is, it has to span a number of lines."  
cellLabel.numberOfLines = 0  
cellLabel.sizeToFit()  
tableViewCell.textLabel?.sizeToFit()  
tableViewCell.textLabel?.numberOfLines = 0  
tableViewCell.textLabel?.lineBreakMode = .ByWordWrapping

接下来我将尝试计算行高,以便容纳多行标签:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {  
        if (indexPath.section == 2 && indexPath.row == 0) {  
            return cellLabel.frame.height  
        }  
        else {  
            return 44  
        }  
}

然而,返回的是一个多行的UITableViewCell,但是文本的结尾被截断了,没有显示出来。我想在返回定义的末尾添加一个值definitionLabel.frame.height,但是标签的内容是不同的。

请问有谁能告诉我如何在Swift 2.0和iOS 9中简单地使用静态UITableViewCell创建多行UILabel?

注:我已经添加了:

tableView.rowHeight = UITableViewAutomaticDimension

我正在使用一个基本的静态表格视图单元格,其默认应用了约束。


应用与单元格的动态高度相同:tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 160.0 - Kirit Modi
无需处理单元格高度即可销售:http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift - Kirit Modi
我已经添加了tableView.rowHeight = UITableVieeAutomaticDimension,但没有成功。我有一个静态表视图,因此只是使用具有自己约束的基本单元格。 - Daniel Bramhall
你正在运行 http://www.raywenderlich.com/87975/dynamic-table-view-cell-height-ios-8-swift 的演示。 - Kirit Modi
你有解决方案吗?我也遇到了同样的挑战。我在静态表格单元格中有一个标签,我希望它可以多行并自动调整高度。我尝试过tableView.rowHeight = UITableViewAutomaticDimensionoverride func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat。但是和你的一样,文本被截断了。 - Sayanee
你尝试过吗..?self.tableView.rowHeight = UITableViewAutomaticDimension; self.tableView.estimatedRowHeight = 44.0; - Nilesh
2个回答

8
在故事板中选择单元格,并将自定义行高设置为0。截至iOS 9,这对我有效。

http://i.stack.imgur.com/WmjPX.png

这是Xcode 7中的一个错误,无论如何都会在xib xml中设置单元格的高度,在之前的Xcode版本中也存在此问题,但不像现在这么严重。当您正在使用的故事板在前景中时,这种刷新会发生。
在以前的Xcode版本中,我必须手动编辑xib文件并删除tableviewcell rect属性,然后一切都会正常,但最新版本仍然会出现问题。
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="0.0" id="uWP-2k-uRh">
    <rect key="frame" x="0.0" y="64" width="600" height="XX.X"/> <-- Xcode 7 keeps adding this line here

然后在您的viewDidLoad中所需的全部是:
override func viewDidLoad() {
    super.viewDidLoad()
    tableView.estimatedRowHeight = 200.0
    tableView.rowHeight = UITableViewAutomaticDimension
}

感谢苹果...


我认为你做错了什么。对我来说,开箱即用。 - Webdevotion
这对我有用。我已经尝试了所有其他方法,包括删除Storyboard中的“rect”属性,如此处所建议:https://dev59.com/xlwY5IYBdhLWcg3w_cBH 我的项目是Objective-C而不是Swift,但将自定义行高设置为0完美地解决了问题。 - siburb
从Xcode 9开始,取消勾选“自定义”(而不是将高度设置为0)也可以起作用。但是,这会将单元格高度重置为Interface Builder上的44(仍然比零好)。 - Nicolas Miari

1
我尝试了所有可用的解决方案,从重写drawRect到调用layoutSubviews,但我想说也许再重新做一遍表格视图单元会有帮助。
我刚刚这样做了,我很惊讶它终于可以正常工作了。我试着将先前的 XML 代码与新代码进行比较,唯一明显的区别是在</prototypes>之后添加了一个<section/>标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接