繁体   English   中英

如何使用 UIStackView 调整 UITableViewCell 的大小

[英]How can I make self sizing UITableViewCell with a UIStackView inside it

我无法在其中使用UIStackView实现自我调整大小的UITableViewCell

对于UITableViewCell我正在做这样的事情:

用户界面

在代码上我这样做:

override func viewDidLoad() {
    super.viewDidLoad()
    self.tableView.estimatedRowHeight = 80
}

但是当我运行应用程序时, UITableViewCell不会调整大小:

结果

使用UIStackView使UITableViewCell自我调整大小我错过了什么?

单元格大小调整工作正常。 您的问题是您为 Stack View 设置了固定高度。

水平 Stack View 中的 View 将其height设置为64 ,最有可能将其标准优先级设置为1000 此堆栈视图很可能将其分布设置为Fill 您基本上告诉 Stack View 包含的图像必须完全填充 Stack View 的高度64 这也将 Stack View 限制为64并限制了除 View 之外的垂直 Stack View。 如果您希望 View 旁边的垂直 Stack View 大于64请将包含 View 的水平 Stack View 的分布更改为Center

你有多行标签吗? 如果是这样,请确保您将 IB 中的 lines 属性设置为 0 而不是 1。

固定 stackView 的顶部和底部。

如果这样做不行,请检查这些:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

在 UITableViewCell 上让自动布局自动调整单元格大小的技巧是确保你有约束来固定每个子视图的所有边——也就是说,每个子视图应该有前导、顶部、尾部和底部约束。 然后,子视图的固有高度将用于指示每个单元格的高度。

这是一个很好的教程,可以帮助您完成它。

尝试固定堆栈视图本身。 请记住,stackView 有责任等距、均匀分布等,因此它需要使用自身与其 superView 之间的约束来解决所有这些问题。

这是苹果的解释

HTH

这是一个使用UIStackView通过自动布局扩展和折叠可变大小的UITableViewCell简单示例

open class IntrinsicHeightTableView: UITableView {

open override var contentSize: CGSize {
    didSet { invalidateIntrinsicContentSize() }
}

open override var intrinsicContentSize: CGSize {
    layoutIfNeeded()
    return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)
} }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM