簡體   English   中英

具有大小類的iOS8自動布局在預覽中工作,但在設備/模擬器中不起作用

[英]iOS8 auto layout with size classes works in preview but not in device/simulator

我正在嘗試使用大小類的自動布局。 我有一個基本的頁面,UIImageView作為背景和UIButton(圖像作為背景)。 總共有6個約束:UIImageView和X中心對齊的頂部/右側/底部/左側空間為0,UIButton頂部空間為230。 以下是界面構建器的外觀: Interface Builder

她是預覽的樣子: Interface Builder預覽

但是,這是我在模擬器(或設備)上運行應用程序時得到的結果: 模擬器

我無法弄清楚為什么沒有執行約束? 我應該提一下,當我嘗試在.xib文件中設置自動布局時會遇到這種情況。 如果我嘗試在具有故事板的項目中做同樣的事情,一切似乎都是為了模擬器和真實設備。

你如何從xib加載視圖?

例如,假設您的視圖位於名為View.xib的文件中,我可以重新創建您的問題

- (void)viewDidLoad {
    [super viewDidLoad];
    UIView *v = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil][0];
    [self.view addSubview:v];
}

這不起作用的原因是因為沒有任何東西告訴自動布局來定位和調整視圖大小以填充屏幕,因此視圖恰好適合其內容 - 這將是背景圖像的大小(因為你有約束將圖像固定到其父視圖)。

要修復它,首先通過設置translatesAutoresizingMaskIntoConstraints = NO確保視圖使用自動布局(否則,從XIB加載時默認為YES),然后將視圖固定到其父級:

- (void)viewDidLoad {
    [super viewDidLoad];
    UIView *v = [[NSBundle mainBundle] loadNibNamed:@"View" 
                                              owner:self
                                            options:nil][0];
    [self.view addSubview:v];

    v.translatesAutoresizingMaskIntoConstraints = NO;
    [self.view addConstraints:
      [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[view]|"
                                              options:0 
                                              metrics:nil
                                                views:@{@"view": v}]];
    [self.view addConstraints:
      [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[view]|"
                                              options:0
                                              metrics:nil
                                                views:@{@"view": v}]];
}

暫無
暫無

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

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