Xcode 8 - 自动布局问题

Xcode 8 - Autolayouts Issue

我正在使用新 Xcode 设置基本的 UIView 子类,但遇到了奇怪的行为。乍一看子类视图似乎加载正常:

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
        if (self) {
            [self baseInit];
}
    return self;
}
- (void)awakeFromNib
{
    [super awakeFromNib];
    [self baseInit];
}

我开始在设置为 iPhone 6 大小的情节提要中构建另一个容器视图,因为我拥有一个。我的布局有点复杂,对象很少,即使我擅长设置约束,结果也发生了变化。

于是开始尝试简单的视图,看看Xcode升级后问题出在哪里

使用 2 个 UIView 的简单练习。

每个约束的首选项设置为 1000,设备设置为 iPhone 6 秒。

但是 iPhone 6/s 或我的设备 iPhone 6 的结果发生了偏移:

所以当我开始 fiddle 时,我发现如果将故事板设备设置为 iPhone SE,它会在两个 iPhone 6 模拟器上正确显示内容和 iPhone 6 台设备:

设置错误,现在已对齐。我是否遗漏了新 Xcode 版本中的内容以及如何使用自动布局和约束?

谢谢 A.

如果 baseInit 正在对 UIView 和框架大小做任何事情,您应该在 viewDidLayoutSubviews 中调用它。在根据视图的约束对视图进行布局后调用此方法。

static dispatch_once_t oncePerLoadToken;

- (void)viewDidLoad {
    [super viewDidLoad];
    oncePerLoadToken = 0;
}

- (void)viewDidLayoutSubviews {
    dispatch_once(&oncePerLoadToken, ^{
        [self baseInit];
    });
}