Autolayout约束改变方向的构成

时间:2015-11-21 19:29:57

标签: ios uiview autolayout

我尝试使用自动布局来实现以下两种布局。第一种是纵向所需的成分,第二种是景观中所需的成分。

自动布局是否可行?如果是这样,在约束方面会是什么样子?

提前致谢。

Portrait Landscape

1 个答案:

答案 0 :(得分:2)

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

  1. 底部布局指南.top = RedView.bottom + 10 @ 999
  2. CyanView.leading = RedView.trailing + 10 @ 999
  3. 为以下约束创建IBOutlet

    1. CyanView.top = RedView.bottom + 10 @ 1000
    2. CyanView.leading =领先+ 10 @ 1000
    3. 例如:

      @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;
        }
      }
      

      随时询问是否有不清楚的事情!