UITableViewCell底部边距约束

NNi*_*ikN 2 xcode uitableview ios autolayout

我有以下UITableViewCell,根据条件,这redView.heightConstraint.constant = 0,工作正常.

但是底部空间结果是+ b = 20,其中

a = 10   between green an red view
b = 10   between red and bottom of the superview
Run Code Online (Sandbox Code Playgroud)

当redView的高度设置为0时,预期的底部空间应该是10. 当redView高度设置为0时,我应该如何设置约束以达到预期的底部边距10?

在此输入图像描述

Swi*_*ect 5

更改该红色视图的高度不会改变其相对于超视图底部的位置,因此绿色视图首先具有10 pix该视图顶部的边距,以及超视图10 pix底部的附加边缘.

选项1:更改2个约束

  1. redView.heightConstraint.constant = 0
  2. redView.bottomConstraint.constant = 0

必须改变2个约束

将这两个变化一起进行,红色视图将有效地成为其超视图底部的零高度视图; 绿色视图也会跟风.

选项2:将红色视图嵌入不可见的占位符中

  • placeholder.heightConstraint.constant = 0

嵌入式视图占位符

占位符(灰色矩形)锚定在superview的底部; 它包含红色视图和垂直间隔.蓝色视图不再相对于红色视图的顶部而是与其占位符的顶部间隔开.该解决方案涉及较少的代码行,用于稍微复杂的资源交易.


无论哪种方式,您可以在constant首次加载视图时存储Storyboard资源以避免硬编码:

// At the class level
let originalHeight = someView.heightConstraint.constant

// At the method level, toggle
someView.heightConstraint.constant = (fullHeight) ? originalHeight : 0
Run Code Online (Sandbox Code Playgroud)