在应用程序运行时,我有时会更改在故事板中设置的一些约束的active属性,以隐藏/显示一些视图。
一切正常,但如果应用程序从一种大小转换到另一种大小(例如,当用户在iPad splitview (屏幕上有两个应用程序)上调整应用程序的大小时),所有的约束都会从故事板返回到它们的初始状态。(当应用程序占据半个屏幕并调整大小以占据超过50%的屏幕时发生。iOS 11)
例如,如果在故事板中约束是活动的,稍后在运行时,我会停用它,在拉伸应用程序(当应用程序是iPad上拆分视图的一部分时)之后,它会再次激活。
是bug还是功能?如何防止这种情况发生?再次激活/停用这些约束的最佳回调方法是什么?
发布于 2018-02-27 23:19:12
如果你可以选择在代码中而不是在故事板中创建这些可修改的约束,我认为这是最好的解决方案。如果没有,请使用下面的方法。
我决定在我的视图控制器中使用traitCollectionDidChange:方法。当调用viewDidLayoutSubviews时,约束已经更改,因此我们可以根据需要重新配置它们。
- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
[super traitCollectionDidChange:previousTraitCollection];
if (previousTraitCollection) _traitsCollectionDidChange = YES;
}
- (void)viewDidLayoutSubviews {
[super viewDidLayoutSubviews];
if (_traitsCollectionDidChange) {
_traitsCollectionDidChange = NO;
// reconfigure your constraints
}
}发布于 2018-02-27 23:00:38
根据来自苹果的以下文档
Adopting Multitasking Enhancements on iPad
当用户移动分隔符时,系统使用applicationWillResignActive:协议方法调用您的应用程序委托对象。
我还发现了另外一点,如下所示
通过实现
UITraitEnvironment和UIContentContainer协议中的方法来响应性状收集和大小变化。
是当用户尝试更改大小时触发的方法
我将建议阅读该文档以了解有关这方面的更多细节。
https://stackoverflow.com/questions/49011288
复制相似问题