【问题标题】:How to set constraint in a reusable UITableViewCell如何在可重用的 UITableViewCell 中设置约束
【发布时间】:2015-11-04 23:25:48
【问题描述】:

我的 xib 布局喜欢下图 除了“c”的高度常数之外,我还设置了从“a”到“b”到...“e”的约束,以便确定单元格的高度。 有时“c”会因为某些原因被隐藏,我将高度常数更改为零,并且在标签可见时将实际高度更改为标签的内容。

--------------------------------------
UILabel(name-singleline)         a
UILabel(title-Multi line)         b
UIView(hidden or not)             c (default height constant = 80)
 -UILabel(content Multi line)     d
UILabel(singleline)               e
--------------------------------------

但是有一个自动布局警告让我抓狂

(
    "<NSLayoutConstraint:0x15756760 V:[UILabel:0x15756650'XXXX'(15)]>",
    "<NSLayoutConstraint:0x15757130 V:[UIView:0x15756ee0(80)]>",
    "<NSLayoutConstraint:0x15758060 V:|-(21)-[UILabel:0x15756650'XXXX']   (Names: '|':UITableViewCellContentView:0x157563a0 )>",
    "<NSLayoutConstraint:0x15758120 V:[UILabel:0x15756650'XXXX']-(14)-[Project.GWWLabel:0x157573d0'YYYY']>",
    "<NSLayoutConstraint:0x157581e0 V:[Project.GWWLabel:0x157573d0'YYYY']-(3)-[UIView:0x15756ee0]>",
    "<NSLayoutConstraint:0x15758210 V:[UIView:0x15756ee0]-(8)-[UILabel:0x157569e0'ZZZZ']>",
    "<NSLayoutConstraint:0x15758270 V:[UILabel:0x157569e0'ZZZZ']-(18)-|   (Names: '|':UITableViewCellContentView:0x157563a0 )>",
    "<NSLayoutConstraint:0x1575d760 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x157563a0(139.5)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x15757130 V:[UIView:0x15756ee0(80)]>

我也很想了解为什么会发生这种情况

【问题讨论】:

    标签: ios objective-c iphone autolayout


    【解决方案1】:

    试试这个:

    将高度约束的优先级设为750,如下图 当你改变高度常数时它会起作用

    【讨论】:

    • 你的回答是对的,但我想知道为什么会这样
    • 这是因为当你给高度常数更高的优先级(1000)时,它会修复那个高度,它不会修改和破坏,所以在这种情况下,当你想改变修复常数时,你会必须将优先级设置为主要 (750),以便轻松修改。
    【解决方案2】:

    自动布局的第一条黄金法则(特别是在处理 TableView 的单元格时)是能够从上到下和从左到右画一条线,并且能够确定每个元素的大小。为了解决这个问题,您需要确保每个视图的每侧至少有一个约束(除非可以推断出它的大小)

    有时在不同屏幕尺寸上测试 UI 时,约束可能会中断。在某些情况下,您应该更改视图的约束或内容拥抱/压缩阻力的优先级,以允许自动布局打破约束并更改常量以适应屏幕大小。 (大多数情况下它只会在几个点上改变,如果它改变得更多你可能需要改变你的约束)

    同样重要的是要提到“隐藏视图,即使它们不绘制,仍然参与自动布局并且通常保留它们的框架,而将其他相关视图留在它们的位置。” check this post

    您可能想要check this postthis one if you use swift

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多