簡體   English   中英

自動布局約束可更改方向的構圖

[英]Autolayout constraints to change composition on orientation

我正在嘗試使用自動布局來實現以下兩種布局。 第一個是肖像所需的構圖,第二個是風景所需的構圖。

自動布局是否有可能,如果是這樣,在約束方面會是什么樣?

提前致謝。

肖像 景觀

在情節提要中設置約束,以獲取所需的縱向布局。 然后添加兩個其他約束並將其優先級從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 =領先+ 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;
  }
}

隨時詢問是否不清楚!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM