UIStackView 布局边距内的 UITableView
UITableView inside UIStackView layout margins
我目前有一个 UITableView
嵌入在 UIStackView
中。我目前已将 StackView 设置为具有自己的填充,如下所示:
stackView.layoutMargins = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8)
stackView.isLayoutMarginsRelativeArrangement = true
我还把stackview设置在它的边缘,它也在scrollview下面。
但是,应用这些设置时,我在 UITableView 约束上遇到错误,告诉我布局边距约束是问题所在。
(
"<NSLayoutConstraint:0x600000645f90 UIStackView:0x7fa9bbc32260.width == UIScrollView:0x7fa9bc019800.width (active)>",
"<NSLayoutConstraint:0x6000006441e0 H:|-(0)-[UIScrollView:0x7fa9bc019800](LTR) (active, names: '|':COVID_19_Compliance_Coach.DashboardView:0x7fa9bbc11340 )>",
"<NSLayoutConstraint:0x600000644320 UIScrollView:0x7fa9bc019800.right == COVID_19_Compliance_Coach.DashboardView:0x7fa9bbc11340.right (active)>",
"<NSLayoutConstraint:0x600000646f30 '_UITemporaryLayoutWidth' COVID_19_Compliance_Coach.DashboardView:0x7fa9bbc11340.width == 0 (active)>",
"<NSLayoutConstraint:0x600000647250 'UISV-canvas-connection' UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide'.leading == UITableView:0x7fa9bc0a2e00.leading (active)>",
"<NSLayoutConstraint:0x6000006472f0 'UISV-canvas-connection' UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide'.trailing == UITableView:0x7fa9bc0a2e00.trailing (active)>",
"<NSLayoutConstraint:0x6000006470c0 'UIView-leftMargin-guide-constraint' H:|-(8)-[UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':UIStackView:0x7fa9bbc32260 )>",
"<NSLayoutConstraint:0x600000647160 'UIView-rightMargin-guide-constraint' H:[UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide']-(8)-|(LTR) (active, names: '|':UIStackView:0x7fa9bbc32260 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6000006472f0 'UISV-canvas-connection' UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide'.trailing == UITableView:0x7fa9bc0a2e00.trailing (active)>
我似乎无法弄清楚错误是什么。如果有人能给我指出正确的方向,那将非常有帮助,或者如果有不同的方法,那也会有帮助。
这里还有一个关于视图层次结构的指南:
UIScrollView
-> UIStackView
-> UITableView
我强烈建议您不要在滚动视图中添加 table 视图,因为 table 视图已经有滚动视图。
也就是说我会这样添加约束
滚动视图:
- 将它固定到超级视图的所有角落
堆栈视图:
- 将其固定到滚动视图的四个角
- 创建一个等于滚动视图高度的高度约束
- 创建等于滚动视图宽度的宽度约束
Table 查看
- 将 table 视图添加到堆栈视图
如果需要向 table 视图添加高度约束,则需要删除堆栈视图的高度约束
如果您向堆栈视图添加其他视图,您还需要向它们添加高度限制
我意识到我在应该如何实施设计方面想得太多了。我删除了 UIStackView
,并将其替换为 UITableView
作为根。
所以现在层次结构更多:
UITableView
-> SectionHeaderView
-> CustomCells (dequeuedReusable)
我决定将这些额外的视图放在顶部的 header 部分视图中,然后改用单元格。谢谢你们的建议和更清晰的方法。非常感谢。
我目前有一个 UITableView
嵌入在 UIStackView
中。我目前已将 StackView 设置为具有自己的填充,如下所示:
stackView.layoutMargins = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8)
stackView.isLayoutMarginsRelativeArrangement = true
我还把stackview设置在它的边缘,它也在scrollview下面。
但是,应用这些设置时,我在 UITableView 约束上遇到错误,告诉我布局边距约束是问题所在。
(
"<NSLayoutConstraint:0x600000645f90 UIStackView:0x7fa9bbc32260.width == UIScrollView:0x7fa9bc019800.width (active)>",
"<NSLayoutConstraint:0x6000006441e0 H:|-(0)-[UIScrollView:0x7fa9bc019800](LTR) (active, names: '|':COVID_19_Compliance_Coach.DashboardView:0x7fa9bbc11340 )>",
"<NSLayoutConstraint:0x600000644320 UIScrollView:0x7fa9bc019800.right == COVID_19_Compliance_Coach.DashboardView:0x7fa9bbc11340.right (active)>",
"<NSLayoutConstraint:0x600000646f30 '_UITemporaryLayoutWidth' COVID_19_Compliance_Coach.DashboardView:0x7fa9bbc11340.width == 0 (active)>",
"<NSLayoutConstraint:0x600000647250 'UISV-canvas-connection' UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide'.leading == UITableView:0x7fa9bc0a2e00.leading (active)>",
"<NSLayoutConstraint:0x6000006472f0 'UISV-canvas-connection' UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide'.trailing == UITableView:0x7fa9bc0a2e00.trailing (active)>",
"<NSLayoutConstraint:0x6000006470c0 'UIView-leftMargin-guide-constraint' H:|-(8)-[UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide'](LTR) (active, names: '|':UIStackView:0x7fa9bbc32260 )>",
"<NSLayoutConstraint:0x600000647160 'UIView-rightMargin-guide-constraint' H:[UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide']-(8)-|(LTR) (active, names: '|':UIStackView:0x7fa9bbc32260 )>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x6000006472f0 'UISV-canvas-connection' UILayoutGuide:0x600001c76a00'UIViewLayoutMarginsGuide'.trailing == UITableView:0x7fa9bc0a2e00.trailing (active)>
我似乎无法弄清楚错误是什么。如果有人能给我指出正确的方向,那将非常有帮助,或者如果有不同的方法,那也会有帮助。
这里还有一个关于视图层次结构的指南:
UIScrollView
-> UIStackView
-> UITableView
我强烈建议您不要在滚动视图中添加 table 视图,因为 table 视图已经有滚动视图。
也就是说我会这样添加约束
滚动视图:
- 将它固定到超级视图的所有角落
堆栈视图:
- 将其固定到滚动视图的四个角
- 创建一个等于滚动视图高度的高度约束
- 创建等于滚动视图宽度的宽度约束
Table 查看
- 将 table 视图添加到堆栈视图
如果需要向 table 视图添加高度约束,则需要删除堆栈视图的高度约束
如果您向堆栈视图添加其他视图,您还需要向它们添加高度限制
我意识到我在应该如何实施设计方面想得太多了。我删除了 UIStackView
,并将其替换为 UITableView
作为根。
所以现在层次结构更多:
UITableView
-> SectionHeaderView
-> CustomCells (dequeuedReusable)
我决定将这些额外的视图放在顶部的 header 部分视图中,然后改用单元格。谢谢你们的建议和更清晰的方法。非常感谢。