我是 iOS 中自动布局的新手。原则上我真的很喜欢这个概念,但它让我疯狂地试图完成最简单的事情。我怀疑我仍然缺少一些简单的基本原则。我正在尝试边做边学,并在实际使用应用程序之前获得基础知识,因此我正在创建非常简单的测试项目。这是一个尽可能简单但无法按预期工作的方法。首先是有效的部分。在 IB 中,我添加了一个 View 来填充整个 viewcontroller,XCode 自动将约束设置为 Top/Bottom/Leading/Trailing 并将 Space 设置为 0。使用 IB 完成后,它按预期工作:
旋转到
伟大的!
现在我试图在代码中做同样的事情:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
UIView *redView = [[UIView alloc] initWithFrame:self.view.bounds];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];
redView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeBottom multiplier:1.0f constant:0.0f]];
[self.view addConstraint:[NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:0.0f]];
}
这就是除了单视图应用程序的默认代码之外的所有代码。
当我运行上面的代码时,试图以编程方式镜像与 IB 相同的东西,我在旋转后得到这个:
为什么相同的约束会导致不同的结果?我想念的可能是一些非常简单且令人尴尬的愚蠢。帮助!!!