长话短说,iOS8有UITableViewAutomaticDimension
所以,你不能只调用你的tableView.rowHeight = UITableViewAutomaticDimension
后跟estimatedRowHeight,因为当你重新加载数据时,你最终会变得非常跳跃,看起来很奇怪。
缓解此问题的方法显然是返回func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat
由于您无法在cellForRowatIndexPath:
中拨打heightForRowAtIndexPath:
,我基本上将我的cellForRowAtIndexPath
复制到另一种方法中并将其更改为高度。我似乎无法让它工作,因为我的UILabel(在单元格中具有动态高度的那个)符合一行而只是截断而不是继续x行,直到显示所有内容。
注意,postBody
是具有动态高度的文本。
我的cellForRowAtIndexPath:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell: UITableViewCell = self.feed.dequeueReusableCellWithIdentifier("post") as UITableViewCell
var userName = cell.viewWithTag(1)! as UILabel
var timestamp = cell.viewWithTag(2)! as UILabel
var postBody = cell.viewWithTag(5)! as UILabel
var post = self.posts[indexPath.row]
userName.text = post.name
timestamp.text = post.timestamp
postBody.text = post.body
return cell
}
my heightForRowAtIndexPath:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
var cell: UITableViewCell = self.feed.dequeueReusableCellWithIdentifier("post") as UITableViewCell
var userName = cell.viewWithTag(1)! as UILabel
var timestamp = cell.viewWithTag(2)! as UILabel
var postBody = cell.viewWithTag(5)! as UILabel
var post = self.posts[indexPath.row]
userName.text = post.name
timestamp.text = post.timestamp
postBody.text = post.body
cell.setNeedsLayout()
cell.layoutIfNeeded()
return cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
}
为什么不起作用?使用UITableViewAutomaticDimension,我得到它的工作,并符合我通过自动布局的约束,但无法在这里得到它。
答案 0 :(得分:0)
heightForRowAtIndexPath
方法将单元格取消。基本上,由于您正在使用它进行高度计算,因此您将一个永远不会显示的单元格出列。您有几个选择:
heightForRowAtIndexPath
中,您可以使用自动布局来计算实际高度,方法是创建一个不会从表格视图中出列的单元格实例。你可以这样做:
.xib
,