iOS   发布时间:2022-03-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – UITabBarController的标签旋转和willRotateToInterfaceOrientation传播大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的应用程序有四个选项卡:A,B,C和D.他们的UIViewController由UITabBarController管理.该应用程序支持旋转,因此每个视图控制器都返回YES到shouldAutorotateToInterfaceOrientation.

使用弹簧和支柱,大多数旋转由iOS自动完成.但是,选项卡A还需要进一步定位,它是在VC的willRotateToInterfaceOrientation方法中完成的.

选择选项卡A的VC并旋转屏幕时,该VC将收到willRotateToInterfaceOrientation消息(由iOS从UITabBarController传播),并且生成的旋转正确.

但是,当选定的选项卡为B并且旋转屏幕时,不会调用A的willRotateToInterfaceOrientation.说得通.但是,如果我然后选择选项卡A,我只得到应用其弹簧和支柱的结果,而不进行其willRotateToInterfaceOrientation完成的后处理.

经过一段时间的努力,在未能在网上找到解决方案之后,我想出了以下内容.我将uITabBarController子类化,并在其willRotateToInterfaceOrientation中调用所有VC的willRotateToInterfaceOrientation,无论哪个是SELEctedViewController:

- (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    if (self.viewControllers != nil) {
        for (UIViewController *v in self.viewControllers) 
            [v willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
    }
}

它有效,但它看起来像一个黑客,我的问题是我是否正在做正确的事情.有没有办法告诉iOS在屏幕旋转后第一次显示它之前总是调用VC的willRotateToInterfaceOrientation?

解决方法

处理自定义布局的最佳方法是通过子类化UIView并覆盖layoutSubviews方法.无论何时更改(以及其他时间),系统都会将layoutSubviews发送到视图.因此,当您的视图A即将出现在具有不同大小的屏幕上时(因为界面在视图B在屏幕上时旋转),系统会向视图A发送layoutSubviews消息,即使它没有向视图控制器A发送一个willRotateToInterfaceOrientation : 信息.

如果您的目标是iOS 5.0或更高版本,则可以覆盖UIViewController子类的viewDidLayoutSubviews方法并在那里进行布局,而不是子类化UIView.我更喜欢在我的视图中使用layoutSubviews,以使我的视图特定逻辑与我的控制逻辑分开.

在willRotateToInterfaceOrientation中进行布局也是一个坏主意:因为系统在实际更改视图大小之前以及旋转动画块之前发送该消息.它在旋转动画块内发送willAnimateRotationToInterfaceOrientation:duration:,layoutSubviews和viewDidLayoutSubviews消息,因此如果在旋转期间视图在屏幕上,则子视图的重新定位将被动画化.

大佬总结

以上是大佬教程为你收集整理的ios – UITabBarController的标签旋转和willRotateToInterfaceOrientation传播全部内容,希望文章能够帮你解决ios – UITabBarController的标签旋转和willRotateToInterfaceOrientation传播所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。