【问题标题】:iOS8 auto layout with size classes works in preview but not in device/simulator具有大小类的 iOS8 自动布局在预览中有效,但在设备/模拟器中无效
【发布时间】:2015-09-26 19:21:45
【问题描述】:

我正在尝试将自动布局与大小类一起使用。我有一个以 UIImageView 作为背景和 UIButton(以图像作为背景)的基本页面。共有 6 个约束:UIImageView 和 X 中心对齐的顶部/右侧/底部/左侧空间为 0,UIButton 上的顶部空间为 230。这是界面构建器的外观:

她是预览的样子:

但是,这是我在模拟器(或设备)上运行应用程序时得到的:

我无法弄清楚为什么没有执行约束? 我应该提到,当我尝试在 .xib 文件中设置自动布局时,会遇到这种行为。如果我尝试在有故事板的项目中做同样的事情,一切似乎都是为了模拟器和真实设备。

【问题讨论】:

标签: ios ios8 xcode6 autolayout size-classes


【解决方案1】:

你是如何从 xib 加载视图的?

例如假设您的视图位于名为 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}]];
}

【讨论】:

  • 谢谢,我认为它与视图尺寸有关,特别是因为情节提要在 ViewController 中有一个额外的视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多