[英]iOS8 auto layout with size classes works in preview but not in device/simulator
我正在嘗試使用大小類的自動布局。 我有一個基本的頁面,UIImageView作為背景和UIButton(圖像作為背景)。 總共有6個約束:UIImageView和X中心對齊的頂部/右側/底部/左側空間為0,UIButton頂部空間為230。 以下是界面構建器的外觀:
她是預覽的樣子:
但是,這是我在模擬器(或設備)上運行應用程序時得到的結果:
我無法弄清楚為什么沒有執行約束? 我應該提一下,當我嘗試在.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.