[英]iOS Auto-Layout: Dynamic height for table view cell
我有一个包含一堆单元格的表视图(自定义单元格,只有其内容视图)。
在tableView:cellForRowAtIndexPath:
我将预定义的UIView(有几个子视图)添加到自定义单元格的内容视图中。 我之前为UIView及其子视图设置了所有约束。
最后但并非最不重要的是,我为自定义单元格(superview)的内容视图和之前添加的UIView(子视图)设置了垂直和水平约束。
约束字符串如下所示:
H:|[view]|
V:|[view]|
不幸的是,我仍然获得所有表视图单元格的默认高度。 我想知道是否有办法让自动布局根据内容大小自动计算高度。
在这里查看我对这个问题的详细答案: https : //stackoverflow.com/a/18746930/796419
设置需要一些工作,但是您可以完全使用自动布局约束来驱动完全动态的表视图而不需要单个硬编码高度(并且让约束求解器完成繁重的工作并为您提供行高)。
自动布局无助于单元格高度。 您需要在tableView:heightForRowAtIndexPath
设置它。 我想你可能会问这个因为你的细胞高度是可变的,而不是固定的。 即,它们取决于内容。
要解决此问题,请预先计算单元格高度并将其存储在数组中。 返回tableView:heightForRowAtIndexPath
方法中相应indexPath
的值。
一定要使用UILabel
类的sizeThatFits
等计算主线程的内容大小。
如果您的计算是密集的,除了与视图相关的方法(如sizeThatFits
之外,请将其中的大部分工作放在main
。
我通过使用CGSize size = [view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
解决了这个问题CGSize size = [view systemLayoutSizeFittingSize:UILayoutFittingCompressedSize];
在tableView:heightForRowAtIndexPath:
.
要设置行高的自动尺寸,请确保执行以下步骤,自动尺寸对单元格/行高度布局有效。
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中的标签实例
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.