iPad多任务激活/停用约束,根据情节提要中的自动划分



在应用程序运行时,我有时会更改故事板中设置的某些约束的 active属性,以隐藏/显示一些视图。

一切正常,但是如果应用程序从一个大小到另一个大小过渡(例如,在iPad splitview(屏幕上的两个应用程序(上调整应用程序的应用程序大小时,都会更改特征(所有约束从故事表中返回到其初始状态。(当应用程序占屏幕的一半并进行调整以占屏幕的50%以上时,发生。IOS11(

(

例如。如果在故事板中,约束是活动的,然后在运行时稍后,我将其停用,在拉伸应用程序之后(当应用程序是iPad上的splitview的一部分时(,它将再次激活。

是错误还是功能?如何防止这种情况发生?再次激活/停用这些约束的最佳回调方法是什么?

如果您可以选择在代码中创建这些可修改的约束,而不是在故事板内创建这些可修改的约束,我认为这是最好的解决方案。如果不是,请使用下面的方法。


我决定在视图控制器内使用traitCollectionDidChange:方法。在调用此方法时,约束不会更改,因此我创建了一个将在viewDidLayoutSubviews方法中使用的标志,该标志在特质集合更改后被调用。当viewDidLayoutSubviews称为约束时,我们可以根据需要重新配置它们。

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [super traitCollectionDidChange:previousTraitCollection];
    if (previousTraitCollection) _traitsCollectionDidChange = YES;
}
- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    if (_traitsCollectionDidChange) {
        _traitsCollectionDidChange = NO;
        // reconfigure your constraints
    }
}

根据以下文档

在iPad上采用多任务增强功能

用户移动分隔线时,系统将使用applicationWillResignActive:协议方法调用您的应用程序委托对象。

我还发现了一个点,如下所示

通过实施方法来响应特质收集和大小的变化 在UITraitEnvironmentUIContentContainer协议中。

是用户尝试更改大小

时将触发的方法

我建议通过文档以获取有关此的更多详细信息。

最新更新