未调用iOS8接口循环方法

tsc*_*otz 32 uiviewcontroller ios ios8

由于willAnimateRotationToInterfaceOrientation:duration:弃用在iOS8上,需要使用viewWillTransitionToSize:withTransitionCoordinator: 代替.

但是,在iOS8上的视图控制器中不会调用此方法.还有什么我需要实现,以便这个回调工作?

我在文档中找不到任何内容.我唯一能找到的是它属于新UIContentContainer 协议.但是,即使我明确地将其添加到我的控制器的协议中,它也不起作用.

有任何想法吗?

小智 39

viewWillTransitionToSize:withTransitionCoordinator:似乎只有工作,如果该接口实际上是要改变大小,这意味着我们已经旋转了90度.如果布局上有一个仅允许横向的蒙版,当旋转180度时,界面大小不会改变,因此似乎不会调用此方法.

我在我的应用程序中解决了这个问题,而是通过以下方式注册UIDeviceOrientationDidChangeNotification通知:

(在我的视图控制器中viewWillAppear):

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
Run Code Online (Sandbox Code Playgroud)

(在我的viewWillDisappear[记得取消订阅])

[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

deviceOrientationDidChange:看起来像:

- (void)deviceOrientationDidChange:(NSNotification *)notification {
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    [self willRotateToInterfaceOrientation:orientation duration:1.0];
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*ert 36

根据文档,记得打电话super

- (void)viewWillTransitionToSize:(CGSize)size
       withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    // ...
}
Run Code Online (Sandbox Code Playgroud)

否则,子视图控制器将不会将消息转发给它们.


Sep*_*pui 7

我知道这个问题在这一点上有点陈旧,但我认为对于可能遇到问题的人来说,问题可能会以不同的方式解决.如果您尝试通过使用加载一个属于DIFFERENT控制器的视图addSubview(controller.view),您还需要将该控制器添加到父级(可能是您要添加到控制器的视图).如果您不将控制器添加到父级,则永远不会收到大小更改的更新.我们后来发现了Apple改变API的原因; 使用iPad专业版,您的SizeClass可以随着多任务处理能力而无需轮换.这也将调用方法:

viewWillTransitionToSize(size: CGSize, 
        withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
Run Code Online (Sandbox Code Playgroud)

在父类中,如果你覆盖上面的方法,请确保你也打电话给超级或者你会找到另一种方法来击败你的墙头......