我正在尝试使用大小类的自动布局。我有一个基本的页面,UIImageView作为背景和UIButton(图像作为背景)。总共有6个约束:UIImageView和X中心对齐的顶部/右侧/底部/左侧空间为0,UIButton顶部空间为230。以下是界面构建器的外观:
她是预览的样子:
但是,这是我在模拟器(或设备)上运行应用程序时得到的结果:
我无法弄清楚为什么没有执行约束? 我应该提一下,当我尝试在 .xib 文件中设置自动布局时会遇到这种情况。如果我尝试在具有故事板的项目中做同样的事情,那么一切似乎都是为了模拟器和真实设备。
答案 0 :(得分:3)
如何从xib加载视图?
e.g。假设您的视图位于名为View.xib的文件中,我可以使用
重新创建您的问题- (void)viewDidLoad {
[super viewDidLoad];
UIView *v = [[NSBundle mainBundle] loadNibNamed:@"View" owner:self options:nil][0];
[self.view addSubview:v];
}
这不起作用的原因是因为没有任何东西告诉自动布局来定位和调整视图大小以填充屏幕,因此视图恰好适合其内容 - 这将是背景图像的大小(因为你有约束将图像固定到其父视图)。
要修复它,首先要确保视图使用自动布局,方法是设置translatesAutoresizingMaskIntoConstraints = NO
(默认为YES,否则,从XIB加载时),然后将视图固定到其父级:
- (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}]];
}