我在从我的 View 和 controller.topLayoutGuide 和 controller.bottomLayoutGuide 中以编程方式设置 NSLayoutconstraints 时遇到了一些问题。
在 viewDidLoad 中使用此代码:
_mainView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:_mainView];
[self.view removeConstraints:self.view.constraints];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_mainView]-0-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(_mainView)]];
id top = self.topLayoutGuide;
id bottom = self.bottomLayoutGuide;
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[top]-0-[_mainView]-0-[bottom]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(top, _mainView, bottom)]];
[self.view layoutSubviews];
结果是:
(_mainView 有深灰色背景色)
如果我设置了相对于它工作的父 View 的约束:
_mainView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:_mainView];
[self.view removeConstraints:self.view.constraints];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_mainView]-0-|" options:NSLayoutFormatAlignAllBaseline metrics:nil views:NSDictionaryOfVariableBindings(_mainView)]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_mainView]-0-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_mainView)]];
[self.view layoutSubviews];
我的错误在哪里? View Controller 层次结构是 uitabbarcontroller -> uinavigationController -> myViewController
已解决!
错误是:
[self.view removeConstraints:self.view.constraints];
我更改了代码
for(NSLayoutConstraint *c in self.view.constraints)
if(c.firstItem == _mainView || c.secondItem == _mainView)
[self.view removeConstraint:c];
它奏效了。 不管怎么说,还是要谢谢你! ;)
最佳答案
检查 self.topLayoutGuide 和 self.bottomLayoutGuide 是否不为零。您可能忘记在 Interface Builder 中设置 socket 。
关于ios - 顶部和底部布局指南的自动布局问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23006226/