我为其设置了一个值后,autolayout约束被更改回来了

时间:2015-01-24 03:49:36

标签: ios autolayout

我有一个视图和一个属性作为高度约束。

我将在运行时更改约束值,代码如下:

-(void) viewWillAppear {
[super viewWillAppear];
if (list.count) {
        self.FilterBarViewHeightConstraint.constant = 35;
        [self.ChartContainerView layoutIfNeeded];
        // do something..
} else {
        self.FilterBarViewHeightConstraint.constant = 0;
        [self.ChartContainerView layoutIfNeeded];
}

我调试单步,将常量设置为0,但是当在屏幕上绘制视图时,我发现约束已更改回35.我想知道,我该如何调试此类问题,以及为什么会改变?

如果我捕获了一个视图层次结构,Xcode确实向我展示了self.height自动布局是35但是我确实改变了它:

前,

(lldb) po self.FilterBarViewHeightConstraint
<NSLayoutConstraint:0x7ffae9f5b300 V:[UIView:0x7ffae9fec800(35)]>

调用self.FilterBarViewHeightConstraint.constant = 0;

(lldb) po self.FilterBarViewHeightConstraint
<NSLayoutConstraint:0x7ffae9f5b300 V:[UIView:0x7ffae9fec800(0)]>

完全显示视图后,再次捕获视图层次结构:

(lldb) po 0x7ffae9f5b300
<NSLayoutConstraint:0x7ffae9f5b300 V:[UIView:0x7ffae9fec800(35)]>

1 个答案:

答案 0 :(得分:0)

将代码放入主队列解决了我的问题。但仍需要更多的知识。

else {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.FilterBarViewHeightConstraint.constant = 0;
            [self.ChartContainerView layoutIfNeeded];
        });}