繁体   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