我有一个情节提要,其中的视图层次很简单:
- View (has top/bottom constraints relative to safeArea >= 30, centerY)
- Label (has height/top(SuperView)/bottom(TextField) constraints)
- TextField (has height/top(Label)/bottom(TableView) constraints)
- TableView (has height >= 0, top(TextField)/bottom(Superview) constraints)
在UITableViewDelegate(cellForRowAt)内部:
tableView.setNeedsLayout()
tableView.layoutIfNeeded()
我希望实现的行为是让TableView和父View随着新记录的添加而增长。但是,相对于安全区域,父视图不应超出其顶部/底部约束。
除表格视图(高度> = 0)外,所有元素都具有明确设置的高度限制和间距。同样,父级的视图内容优先级为250,而tableview的压缩阻力为750。我认为固定高度限制和元素之间的间距将使tableview增长到某个点,因为顶部的内容压缩阻力较高/ bottom安全区域限制要比TableView要大。
但是,XCode强迫我为父视图设置高度或Y位置约束。我不能这样做,因为这样视图就无法自动增长。
我宁愿坚持使用AutoLayout,并想知道是否有人对如何执行此操作有想法或资源。
答案 0 :(得分:1)
表格视图不会根据行数自动设置高度。
您可以使用此自定义表格视图类(来自https://stackoverflow.com/a/48623673/6257435):
final class ContentSizedTableView: UITableView {
override var contentSize:CGSize {
didSet {
invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
layoutIfNeeded()
return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)
}
}
每当内容大小更改时,它将“自动调整大小”您的表视图。要使用它,请添加一个表视图并将其类设置为ContentSizedTableView
。
>= 0
(如果您希望其从底部停止8点,或者将布局的值设为>= 8
,则限制为100
。ContentSizedTableView
之类的值时,您可以在处理布局时看到它。 运行应用程序时,表格视图的高度约束将被删除,abc
将自动增长,直到达到底部约束为止。