当前位置:  开发笔记 > 运维 > 正文

多任务时不调用traitCollectionDidChange

如何解决《多任务时不调用traitCollectionDidChange》经验,为你挑选了2个好方法。

我正在努力采用多任务来支持应用程序的拆分视图.但我发现app在右边时没有调用traitCollectionDidChange.有没有人对此有所了解?



1> Mike Keskino..:

你可以覆盖traitCollectionDidChange你的ViewController.

然而.

traitCollectionDidChange从一种拆分视图模式更改为另一种模式时调用.例如从50/50视图到33/66.因此,当您进入多任务模式或退出时,不会调用它.

如果您需要处理所有事件,包括进入和退出多任务模式,请viewWillTransitionToSize:withTransitionCoordinator:改用:

// put this in your ViewController code     
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator {
        [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
        // TODO: put your code here (runs BEFORE transition complete)
    }

如果您希望您的代码称为AFTER,那么转换就可以了:

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator {

    [coordinator animateAlongsideTransition:nil completion:^(id  _Nonnull context) {
        // TODO: put your code here (runs AFTER transition complete)
    }];
}


只是暗示谁读过这个.更改分割模式时,并不总是调用`traitCollectionDidChange`,就像你说"从50/50视图到33/66".只有在改变实际大小等级时才会调用它.例如,如果您有iPad而不是iPad专业版,并且您的应用程序显示在右侧,则不会调用traitCollectionDidChange,因为两种模式下的大小类都是Compact.

2> Rashwan L..:

你试过viewWillTransitionToSize方法吗?这用于通知容器其视图的大小即将更改.

Objective-C的

- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator

迅速

func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
    coordinator.animateAlongsideTransition(nil, completion: {
    if UIDevice.currentDevice().orientation.isLandscape.boolValue {
        print("landscape")
    } else {
        print("portrait")
    }
}


viewWillTransitionToSize是在特征变化以外的情况下调用的(如紧凑型iPhone上的旋转),因此这里不是一个好的选择.
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有