自动布局约束在我为其设置值后被改回
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];
});}
我有一个视图和一个 属性 作为高度限制。
我会在运行时更改约束值,代码如下:
-(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];
});}