如何在可重用的UITableViewCell中设置约束

时间:2015-08-12 11:21:26

标签: ios objective-c iphone autolayout

我的xib布局喜欢绘图 我已经设置了约束" a"到" b"到..." e"除了" c"的高度常数这样就可以确定细胞的高度。 有时候" 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)]>

我也非常有兴趣了解为什么会发生这种情况

2 个答案:

答案 0 :(得分:3)

试试这个:

使高度约束750的优先级如下所示 当你改变高度常数时它会起作用

enter image description here

答案 1 :(得分:0)

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

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

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

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