我有UIViewController
,我想根据点击按钮动态修改部分布局。
作为简化示例,假设我在IB(self.box)中创建了UIView
。在IB中,设置一个约束,使视图的宽度等于VC视图宽度的0.9。
然后我以编程方式添加另一个约束并将其另存为强属性。它将视图的宽度设置为VC视图宽度的0.7,并删除先前的约束。
这会导致相互矛盾的约束错误和完全破坏的视图。无论我是先添加还是删除,还是使用.active
属性而不是添加/删除,都会发生同样的情况。
有关如何使这项工作的任何想法?我的实际案例比较复杂,但我已经检查过,只修改了UIViewController
中视图的宽度约束导致错误,即使将其设置为IB中的不同乘数也不会导致任何冲突。
- (void) viewDidLoad
{
NSLayoutConstraint* lowWidth = [NSLayoutConstraint constraintWithItem:self.box attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeWidth multiplier:0.7 constant:0.f];
self.lowWidth = lowWidth;
[self.view removeConstraint:self.highWidth];
[self.view addConstraint:self.lowWidth];
}
约束冲突包括以下内容:
Probably at least one of the constraints in the following list is one you don't want.
Try this:
<NSLayoutConstraint:0x145efb0f0 UIView:0x145d8d330.width == 0.7*UIView:0x14755e890.width>,
<NSLayoutConstraint:0x1474589b0 UIView:0x145d8d330.width == 0.9*UIView:0x14755e890.width>
编辑:在我的IBOutlet约束上调用setActive:似乎没有用,所以我删除了插座并以编程方式创建了约束。这次它按预期工作,但我没有解释为什么插座不起作用。请注意,设置为弱/强不会改变任何内容。
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *highWidth;
答案 0 :(得分:0)
我只使用一个NSLayoutConstraint
并修改约束大小。
self.highWidth?.contant = size
[self.view layoutIfNeeded]
或激活/停用约束... NSLayoutConstraint class