最佳答案
在 Storyboard 中设置约束以获得所需的纵向布局。然后添加两个额外的约束并将它们的优先级从 1000 更改为 999:
- 底部布局 Guide.top = RedView.bottom + 10 @999
- CyanView.leading = RedView.trailing + 10 @999
为以下约束创建 IBOutlet
:
- CyanView.top = RedView.bottom + 10 @1000
- CyanView.leading = leading + 10 @1000
例如:
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *bottomSpaceToViewConstraint;
@property (strong, nonatomic) IBOutlet NSLayoutConstraint *leadingSpaceToSuperviewConstraint;
重要的是从 weak
引用切换到 strong
引用,以将约束保留在内存中,即使它们未处于事件状态也是如此。
最后实现如下代码:
- (void)viewDidLoad {
[super viewDidLoad];
// check if viewcontroller is opened in landscape
CGSize size = self.view.bounds.size;
if (size.width > size.height) {
// is landscape
self.bottomSpaceToViewConstraint.active = NO;
self.leadingSpaceToSuperviewConstraint.active = NO;
}
}
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
if (size.height > size.width) {
// will transition to portrait
self.bottomSpaceToViewConstraint.active = YES;
self.leadingSpaceToSuperviewConstraint.active = YES;
} else {
// will transition to landscape
self.bottomSpaceToViewConstraint.active = NO;
self.leadingSpaceToSuperviewConstraint.active = NO;
}
}
如有不明之处欢迎随时提问!
关于ios - 自动布局约束以改变方向的组成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33847643/