【发布时间】:2014-10-31 14:14:21
【问题描述】:
我正在尝试为我的 tableview 使用新的自动大小。我正在这样做:
tableView.rowHeight = UITableViewAutomaticDimension
我的 UITableViewCell 中有一个多行 uilabel,它有一些工作出色的约束;当我以横向和纵向进入表格视图时,行的高度是动态的!太棒了!
...但是当我旋转设备时,行获得基本高度(即 44)。
我添加了这一行:
override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval)
{
self.tableView.reloadData()
}
问题就消失了。但这真的有必要吗?一定有更好的方法来解决这个问题?
编辑:
我刚刚发现当我像这样在表格视图中删除一行时会出现同样的问题:
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
我在这里遗漏了什么吗?为什么这不是开箱即用的?
再次编辑:
我现在是这样做的:
self.tableView.estimatedRowHeight = 44
tableView.rowHeight = UITableViewAutomaticDimension
然后当我从 API 中获取数据时:
self.tableView.reloadData()
self.tableView.beginUpdates()
self.tableView.endUpdates()
这似乎涵盖了我迄今为止测试过的所有情况,但它看起来真的很hacky!如果没有开始/结束更新,单元格在第一次加载时会显示一些非常时髦的高度。 (但是当旋转设备时,单元格会正确调整它们的高度。)
这一切看起来都很有问题。我还没有找到正确涵盖这些情况的单一指南。
【问题讨论】:
-
我发现这篇文章非常有用,但不确定它是否能解决您的特定问题。但在 iOS8 中,您不必使用 willAnimateRotationToInterfaceOrientation 也不必重新加载数据:captechconsulting.com/blog/tyler-tillage/…
-
您好,根据您的问题,您能告诉我您是否在 uitableviewcell 中使用了自动布局约束,您是否要求高度与 uilabel 中的内容一致,还是需要始终为 44。还请添加图片您所面临的问题将更有助于确定您的问题。
标签: ios uitableview swift ios8 autolayout