我有一组带有一组单元格的表视图(自定义单元格,只有内容视图)。
在tableView:cellForRowAtIndexPath:
我正在向自定义单元格的内容视图添加预定义的UIView(有几个子视图)。我之前为UIView及其子视图设置了所有约束。
最后但并非最不重要的是,我为自定义单元格(superview)的内容视图和之前添加的UIView(子视图)设置了垂直和水平约束。
约束字符串如下所示:
H:|[view]|
V:|[view]|
不幸的是,我仍然获得所有表格视图单元格的默认高度。我想知道是否有办法让自动布局根据内容大小自动计算高度。
答案 0 :(得分:5)
在此处查看我对此问题的详细解答:https://stackoverflow.com/a/18746930/796419
设置需要一些工作,但你绝对可以让Auto Layout约束驱动一个完全动态的表视图,而不需要一个硬编码高度(并让约束求解器完成繁重的工作并为你提供行高)
答案 1 :(得分:2)
自动布局对单元格高度没有帮助。您需要在tableView:heightForRowAtIndexPath
中进行设置。我想你可能会问这个因为你的细胞高度是可变的,而不是固定的。即,它们取决于内容。
要解决此问题,请预先计算单元格高度并将其存储在数组中。返回indexPath
方法中相应tableView:heightForRowAtIndexPath
的值。
请务必使用sizeThatFits
类等UILabel
计算主线程的内容大小。
如果您的计算是密集的,除了main
等与视图相关的方法之外,请将其中的大部分关闭sizeThatFits
。
答案 2 :(得分:0)
我在CGSize size = [view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
中使用tableView:heightForRowAtIndexPath:
解决了这个问题。
答案 3 :(得分:0)
要设置行高的自动尺寸,请确保执行以下步骤,自动尺寸对单元格/行高度布局有效。
UITableViewAutomaticDimension
分配给rowHeight& estimatedRowHeight heightForRowAt
并向其返回值UITableViewAutomaticDimension
)<强>夫特:强>
@IBOutlet weak var table: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Don't forget to set dataSource and delegate for table
table.dataSource = self
table.delegate = self
// Set automatic dimensions for row height
// Swift 4.2 onwards
table.rowHeight = UITableView.automaticDimension
table.estimatedRowHeight = UITableView.automaticDimension
// Swift 4.1 and below
table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension
}
// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// Swift 4.2 onwards
return UITableView.automaticDimension
// Swift 4.1 and below
return UITableViewAutomaticDimension
}
用于UITableviewCell中的标签实例