激活uitableviewcell中的约束不能第一次工作

时间:2016-08-08 12:50:52

标签: ios objective-c uitableview autolayout

我在UITableViewCell中有以下层次结构。

UITableViewCell
-UIView1
--UILabel1
-UIView2
--UILabel2

当UILabel1没有文本时,我希望UIView1被高度隐藏。为此,对于最初卸载状态的UIView1,我采用了0的高度约束。

现在在cellForRowAtIndexPath中我在检查Label1的字符串是否为空时激活此约束?

这不适用于第一次加载单元格,当我滚动浏览tableview时,会应用此约束。我在激活约束后使用[cell layoutIfNeeded],但似乎没有在这里首次加载。

我如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

我设法通过创建两个约束并在运行时更改它们的优先级来解决这个问题。

约束优先级发生在子类UITableViewCell的layoutSubviews()中。

希望这有帮助!

答案 1 :(得分:0)

很晚了,但也许会帮助某人:

像上面一样,您只需要覆盖layoutSubviews函数

override func layoutSubviews() {
    super.layoutSubviews()

    //update your constraints
    //NOTE: there's no need to call layoutIfNeeded 
}

答案 2 :(得分:0)

根据您的要求添加2个具有相同优先级1000的约束,然后在界面生成器中将其删除,使其出口,并根据您的要求在代码中使其成为 active ,不要忘记使用 layoutIfNeeded