繁体   English   中英

UIStackView 布局边距内的 UITableView

[英]UITableView inside UIStackView layout margins

我目前有一个嵌入在UITableView中的UIStackView 我目前已将 StackView 设置为具有自己的填充,如下所示:

stackView.layoutMargins = UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8)
stackView.isLayoutMarginsRelativeArrangement = true

我还将堆栈视图设置在其边缘,并且它也在滚动视图下。

但是,应用这些设置,我在 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

我强烈建议您不要在滚动视图中添加表格视图,因为该表格视图已经具有滚动视图。

话虽如此,我会以这种方式添加约束

  1. 滚动视图:

    • 将其固定到超级视图的各个角落
  2. 堆栈视图:

    • 将其固定到滚动视图的四个角
    • 创建一个等于滚动视图高度的高度约束
    • 创建一个等于滚动视图宽度的宽度约束
  3. 表视图

    • 将表视图添加到堆栈视图

在此处输入图像描述

如果您需要向表视图添加高度约束,则需要删除堆栈视图的高度约束

在此处输入图像描述

如果您向堆栈视图添加其他视图,则还需要向它们添加高度约束

我意识到我在设计应该如何实施上想得太多了。 我已删除UIStackView ,并将其替换为UITableView作为根。

所以现在层次结构更多:

UITableView
 -> SectionHeaderView 
 -> CustomCells (dequeuedReusable)

我决定将这些额外的视图放在顶部的 header 视图部分,然后改用单元格。 谢谢你们的建议和更清晰的方法。 非常感激。

暂无
暂无

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

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