自动布局约束在我为其设置值后被改回

autolayout constraint was changed back after I set a value to it

我有一个视图和一个 属性 作为高度限制。

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

-(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)]>

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

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