ios - 自动布局约束以改变方向的组成

标签 ios uiview autolayout

我正在尝试使用自动布局来实现以下两种布局。第一个是所需的纵向构图,第二个是所需的横向构图。

这是否可以通过自动布局实现?如果可以,它在约束方面会是什么样子?

提前致谢。

Portrait Landscape

最佳答案

在 Storyboard 中设置约束以获得所需的纵向布局。然后添加两个额外的约束并将它们的优先级从 1000 更改为 999:

  1. 底部布局 Guide.top = RedView.bottom + 10 @999
  2. CyanView.leading = RedView.trailing + 10 @999

为以下约束创建 IBOutlet:

  1. CyanView.top = RedView.bottom + 10 @1000
  2. 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/

相关文章:

objective-c - UIView 仅设置侧边框

ios - 如何在 Swift 的 plus 设备上增加字体和大小?

ios - 无法在 ScrollView 上选择选项卡栏中的项目

ios - 删除/重置核心数据中的所有条目?

iphone - 插入 subview :belowSubview: in UITableViews

ios - fread失败问题(IOS 64位环境)

iphone - didReceiveMemoryWarning 和 viewDidUnload

高度未知的 iOS 自动布局

iphone - 如何使 UIWebView 滚动得更快?

ios - 用索引号数组对NSArray进行排序