UITableViewAutomaticDimension 不适用于 iOS 8
UITableViewAutomaticDimension not working on iOS 8
我正在按照这个 tutorial 来制作自调整大小的单元格。
我将自定义单元格注册到 table 视图中,并在单元格 xib 中手动设置了每个子视图约束。请参考 source code in GitHub
在一个单元格的内容视图中垂直排列 3 个标签在 iOS 9 中运行良好,但在 iOS 8 中运行良好(均在设备和模拟器中测试)。
在iOS8个单元格中没有合适的高度并且不是每个标签都显示它的全文。
iOS 8个不合适:
iOS 9如我所料:
如有任何建议,我们将不胜感激!
更新
viewDidLoad
中的代码:
tableView.registerNib(UINib.init(nibName: "SelfSizingCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
tableView.dataSource = self
tableView.delegate = self
tableView.estimatedRowHeight = 60.0
tableView.rowHeight = UITableViewAutomaticDimension
tableView.reloadData()
在 return 单元格之前的 "cellForRowAtIndexPath" 方法中添加以下代码。
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
为使用的 UILabel 提供顶部、底部、前导、尾随约束。
检查行数必须为 0
然后设置以下方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}
现在运行项目:)
要使其在 iOS 8 上运行,您需要 3 个东西:
1) 在您的视图中设置 table "estimated row height" 加载方法。
tableView.estimatedRowHeight = 200.0
2) 实施"table view height for cell at... method"。 (如果您的 class 不是 'UITableViewController' 的子 class 并且您要自己添加 table 视图,请删除 'override'。
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
3) 当你在 'table view cell for row at...' 方法中 return 你的单元格时调用 'updateConstraintsIfNeeded' 方法。
cell.updateConstraintsIfNeeded()
return cell
注意:iOS 9+
不需要第 3 步
我无法让它工作...我检查了该线程中的所有提示,但 table 视图单元格未调整其高度。
我在故事板的 table 视图中将相同的自定义 table 视图单元设置为原型单元,并且 它起作用了。
出于可重用性的原因,我将单元设置为 xib。 table 视图加载,但单元格不再调整大小。它似乎适用于故事板,但不适用于 xib table 视图单元格。
我在每个电视单元内都有一个 UICollection 视图,其中包含不同数量的 cv 单元,这就是每个电视单元的高度不能相同的原因。
我没有更改任何函数调用,例如self.tableview.beginUpdates() 和 .endUpdates() 在多个地方被调用。
我使用 Xcode 8.3.2
这两行对我有用:
tableView.estimatedRowHeight = 200.0
tableView.rowHeight = UITableViewAutomaticDimension
我从其他答案中尝试的所有其他方法均无效。
版本 10.1
UITableViewAutomaticDimension 重命名为 UITableView.automaticDimension
我正在按照这个 tutorial 来制作自调整大小的单元格。
我将自定义单元格注册到 table 视图中,并在单元格 xib 中手动设置了每个子视图约束。请参考 source code in GitHub
在一个单元格的内容视图中垂直排列 3 个标签在 iOS 9 中运行良好,但在 iOS 8 中运行良好(均在设备和模拟器中测试)。
在iOS8个单元格中没有合适的高度并且不是每个标签都显示它的全文。
iOS 8个不合适:
iOS 9如我所料:
如有任何建议,我们将不胜感激!
更新
viewDidLoad
中的代码:
tableView.registerNib(UINib.init(nibName: "SelfSizingCell", bundle: nil), forCellReuseIdentifier: cellIdentifier)
tableView.dataSource = self
tableView.delegate = self
tableView.estimatedRowHeight = 60.0
tableView.rowHeight = UITableViewAutomaticDimension
tableView.reloadData()
在 return 单元格之前的 "cellForRowAtIndexPath" 方法中添加以下代码。
cell.setNeedsUpdateConstraints()
cell.updateConstraintsIfNeeded()
为使用的 UILabel 提供顶部、底部、前导、尾随约束。 检查行数必须为 0 然后设置以下方法
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath{
return UITableViewAutomaticDimension;}
现在运行项目:)
要使其在 iOS 8 上运行,您需要 3 个东西:
1) 在您的视图中设置 table "estimated row height" 加载方法。
tableView.estimatedRowHeight = 200.0
2) 实施"table view height for cell at... method"。 (如果您的 class 不是 'UITableViewController' 的子 class 并且您要自己添加 table 视图,请删除 'override'。
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
3) 当你在 'table view cell for row at...' 方法中 return 你的单元格时调用 'updateConstraintsIfNeeded' 方法。
cell.updateConstraintsIfNeeded()
return cell
注意:iOS 9+
不需要第 3 步我无法让它工作...我检查了该线程中的所有提示,但 table 视图单元格未调整其高度。
我在故事板的 table 视图中将相同的自定义 table 视图单元设置为原型单元,并且 它起作用了。
出于可重用性的原因,我将单元设置为 xib。 table 视图加载,但单元格不再调整大小。它似乎适用于故事板,但不适用于 xib table 视图单元格。
我在每个电视单元内都有一个 UICollection 视图,其中包含不同数量的 cv 单元,这就是每个电视单元的高度不能相同的原因。
我没有更改任何函数调用,例如self.tableview.beginUpdates() 和 .endUpdates() 在多个地方被调用。 我使用 Xcode 8.3.2
这两行对我有用:
tableView.estimatedRowHeight = 200.0
tableView.rowHeight = UITableViewAutomaticDimension
我从其他答案中尝试的所有其他方法均无效。
版本 10.1
UITableViewAutomaticDimension 重命名为 UITableView.automaticDimension