簡體   English   中英

我們可以加載具有自動布局的 XIB 作為以編程方式創建的視圖的子視圖,而無需自動布局,並使用父視圖調整子視圖的大小嗎?

[英]Can we load an XIB with auto layout as a subview of a view created programmatically without auto layout and have the subview resize with parent view?

背景:

  • 剛開始學習和使用自動布局。 所以我可能會在約束上出錯。
  • 支持 iOS7 和 iOS8,所以還沒有涉足大小類。

場景:我有一個以編程方式創建的超級視圖,它出現在應用程序的所有屏幕中。 現在我嘗試加載一個 XIB 並將其作為子視圖分配給這個超級視圖。 它在 iPhone 中看起來不錯(因為 XIB 是按照 iPhone 尺寸設計的)。 但是在 iPad 中,使用相同的 XIB,子視圖保持 iPhone 尺寸。

這個設置有什么辦法可以在 iPad 上工作,讓 XIB 調整大小以填充屏幕而不在子視圖和超級視圖之間設置約束?

如果您認為有幫助,我會發布現有的約束。

您可以通過在添加子視圖時設置子視圖的框架或以編程方式向子視圖添加約束來實現它。

享受.. :)

在以編程方式創建視圖后,您應該從 xib 為視圖添加約束。 將其視為主視圖的常規子視圖。 所以

  1. 從 xib 創建您的視圖

    UIView *someView = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([YOUR_VIEW_CLASS_NAME class]) owner:self options:nil] lastObject];

  2. 將其添加為子視圖

    [yourSuperview addSubview: someView];

  3. 為頂部、底部、左側、右側添加約束

NSDictionary *views = @{@"someView":self.background};

[yourSuperview addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"H:|[someView]|"
                      options:0
                      metrics:nil
                      views:views]];

[yourSuperview addConstraints:[NSLayoutConstraint
                      constraintsWithVisualFormat:@"V:|[someView]|"
                      options:0
                      metrics:nil
                      views:views]];
  1. 通過[someView setNeedsLayout];調用更新[someView setNeedsLayout];

暫無
暫無

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

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