如何在其中使用UIStackView自定义UITableViewCell的大小

时间:2016-08-25 22:18:47

标签: ios swift uitableview uistackview

我无法在其内部UITableViewCell实现自我调整UIStackView

对于UITableViewCell我做这样的事情:

ui

关于代码I'我这样做:

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

但是当我运行应用时,UITableViewCell s没有调整大小:

result

如果UITableViewCell内部有UIStackView sqrt(x)自我调整,我会错过什么?

6 个答案:

答案 0 :(得分:2)

你有多行标签吗?如果是这样,请确保将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
}

答案 1 :(得分:1)

使自动调整单元格的自动布局在UITableViewCell上工作的技巧是确保你有限制来固定所有方面的每个子视图 - 也就是说,每个子视图应该具有前导,顶部,尾部和底部约束。然后,子视图的固有高度将用于指示每个单元格的高度。

这是a nice tutorial,它将帮助您完成它。

答案 2 :(得分:0)

尝试固定堆栈视图本身。请记住,stackView有责任同等空间,均匀分布等,因此它需要在自身和superView之间使用约束来计算所有这些。

这里是apple explanation

HTH

答案 3 :(得分:0)

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

水平堆栈视图中的视图的height设置为64,最有可能的标准优先级设置为1000。此堆栈视图很可能已将其分发设置为Fill。您基本上告诉了堆栈视图,包含的图像必须以64的高度完全填充堆栈视图。这也将堆栈视图限制为64,并在视图之外将垂直堆栈视图限制为Center。如果您希望视图旁边的垂直堆栈视图大于64,则将包含该视图的水平堆栈视图的分布更改为$daysOn = [ 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Mon']; $daysOff = [ 'Sat', 'Sun' ]; $today = date("N", strtotime('today')); $yesterday = date("N", strtotime('yesterday')); $daysOnRearranged = array_merge(array_slice($daysOn, $today), array_slice($daysOn, 0, $yesterday));

答案 4 :(得分:0)

这是simple example,使用UIStackView通过自动布局扩展和折叠大小可变的UITableViewCell

答案 5 :(得分:0)

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)
} }