Xcode 8 - 自动布局问题
Posted
技术标签:
【中文标题】Xcode 8 - 自动布局问题【英文标题】:Xcode 8 - Autolayouts Issue 【发布时间】:2016-10-05 23:05:52 【问题描述】:我正在使用新的 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 6s。
但在 iPhone 6/s 或我的设备 iPhone 6 上的结果发生了变化:
所以当我开始摆弄时,我发现如果将故事板设备设置为 iPhone SE,它会在 iPhone 6 模拟器和 iPhone 6 设备上正确显示内容:
设置错误,现在已对齐。我是否遗漏了新 Xcode 版本中的某些内容以及如何使用自动布局和约束?
谢谢 A.
【问题讨论】:
【参考方案1】:如果baseInit
正在使用 UIViews 和帧大小做任何事情,您应该在 viewDidLayoutSubviews
中调用它。在根据视图的约束对视图进行布局后调用此方法。
static dispatch_once_t oncePerLoadToken;
- (void)viewDidLoad
[super viewDidLoad];
oncePerLoadToken = 0;
- (void)viewDidLayoutSubviews
dispatch_once(&oncePerLoadToken, ^
[self baseInit];
);
【讨论】:
以上是关于Xcode 8 - 自动布局问题的主要内容,如果未能解决你的问题,请参考以下文章
从 Xcode 8 转换为 Xcode 9 的项目的自动布局失败
自动布局问题 Xcode 8 [_SwiftValue nsli_superitem]
转 iOS 8 Auto Layout界面自动布局系列2-使用Xcode的Interface Builder添加布局约束