我还不熟悉iOS中的自动布局技术。理论上,我非常喜欢这个概念,但是我试图完成最简单的事情时却感到很头痛。我猜测自己仍然缺乏一些基本原则。我正在尝试通过实践学习,并在实际应用程序之前掌握基础知识,因此我创建了非常简单的测试项目。以下是一个最简单的项目,但它并没有按预期工作。首先是能够正常工作的部分。在IB中,我添加了一个视图来填满整个视图控制器,XCode会自动将约束设置为顶部、底部、前导和尾随以及间距为0。在完成IB后,它可以像预期的那样工作:
接着旋转成下面这样:
太棒了!现在我正在试图用代码做同样的事情:
![enter image description here](https://istack.dev59.com/9Uydm.webp)
![enter image description here](https://istack.dev59.com/osQhR.webp)
- (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相同的东西,并运行以上代码,在旋转后得到以下结果:
为什么相同的约束会导致不同的结果?可能是我错过了一些非常简单和尴尬的东西。求助!
translatesAutoresizingMaskIntoConstraints
设置为NO
。 - Raptor