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];
});
}
我正在使用新 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];
});
}