当我向文本字段添加占位符时,我的应用程序在ios7中崩溃,在ios8中同样工作正常。通过自动布局以编程方式添加了控件
正如建议的那样,我在委托方法的末尾添加了[self.view layoutIfNeeded];
viewDidLayout
但应用程序仍然崩溃并出现以下异常
断言失败 由于未捕获的异常"NSInternalInconsistencyException"而终止应用程序,原因:"执行 -layoutSubviews 后仍需要自动布局。UITextField 对 -layoutSubviews 的实现需要调用 super。
编程方式添加约束的位置非常重要。不应将它们添加到布局方法回调之一(如 layoutSubviews
或 viewdidLayoutSubviews
)中。这是因为在调用这些方法后,系统应具有视图布局,如果在视图已布局后添加新约束并且需要新的布局周期,则会发生崩溃。
我建议您考虑另一种可以添加新约束的方法。如果没有适合您的其他地方,请尝试在调用 super
方法之前添加约束,而不是相反。
所以像这样:
- (void)viewDidLayoutSubviews {
// Add constraints
[super viewDidLayoutSubviews];
}
如果您可以发布一些代码,我非常乐意帮助您进一步:)