之前项目,只能IOS12可以指定界面横屏,其他界面竖屏。但是到IOS13 发现用查到各类方法,都不行,最后采用临时方案,在竖屏界面绘制横屏予以解决。但是该方案有不少隐患,面临各个机型的适配工作,而且部分功能受限制。因此最后,还是要积极寻找彻底的横屏方案。
一个月后,在解决一个IOS12横屏问题时候,参考相关案例,终于定位到原因了。见代码:
SMTTabBarController *vc = [[SMTTabBarController alloc] init];
SMTNavigationController *nav = [[SMTNavigationController alloc] initWithRootViewController:vc];
self.window.rootViewController = nav;
我们项目,在加载界面时候,继承了父类SMTNavigationController.后面每个层都继承该类。但是该类没有实现任何旋转相关代码。在IOS12可以直接指定子类实现旋屏,但是IOS13要求,必须父类也有对应旋屏代码,才可以实现指定界面横屏。
增加代码如下:
#import "SMTNavigationController.h"
@interface SMTNavigationController () <UIGestureRecognizerDelegate>
@end
@implementation SMTNavigationController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (BOOL)shouldAutorotate {
return NO;
}
- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated
{
viewController.hidesBottomBa
Xcode13 指定界面横屏解决方案

在iOS13中,为解决指定界面横屏的问题,以往的方法失效,采用临时方案通过在竖屏界面绘制横屏,但存在适配和功能限制。最终发现,需要在父类SMTNavigationController中添加旋转代码,子类再实现相关旋转方法,才能实现在iOS13上的横屏功能。添加进入和退出时的横竖屏切换代码后,问题得以解决。
最低0.47元/天 解锁文章
4236





