重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在开发项目的时候,遇到了一个问题,就是其中一个页面需要强制横屏,而其他页面要强制竖屏,然后返回在回到横屏,总结了一些人的经验给需要的人。
汉寿网站制作公司哪家好,找成都创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站建设等网站项目制作,到程序开发,运营维护。成都创新互联从2013年开始到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联。
首先在AppDelegate.h里面添加@property(nonatomic,assign)NSInteger allowOrientations; 然后实现下面的方法。
- (NSUInteger)application:(UIApplication*)application supportedInterfaceOrientationsForWindow(UIWindow*)window{
if(_allowOrientations ==1) {
return UIInterfaceOrientationMaskLandscapeRight;
}
else{
return (UIInterfaceOrientationMaskPortrait);
}
}
最后在需要使用横竖屏切换的控制器导入Appdelegate.h文件 实现方法:
- (void)viewDidLoad{
[superviewDidLoad];
AppDelegate * appDelegate = (AppDelegate *)[UIApplicationsharedApplication].delegate;
appDelegate.allowRotation =1;
}
返回到上一个页面自动切换到竖屏:
if([[UIDevicecurrentDevice] respondsToSelector:@selector(setOrientation:)]) {
SEL selector =NSSelectorFromString(@"setOrientation:");
NSInvocation*invocation = [NSInvocationinvocationWithMethodSignature:[UIDeviceinstanceMethodSignatureForSelector:selector]]; [invocation setSelector:selector];
[invocation setTarget:[UIDevicecurrentDevice]];
intval =UIInterfaceOrientationPortrait;
[invocation setArgument:val atIndex:2];
[invocation invoke];
}
--- 以上对xcode10及以前模拟器都没问题 ---
那么 xCode11 iOS 13 针对modalStyle推出了新特性,presentViewController的时候需要强制添加fullScreen的modalStyle,就会导致在横屏切换到竖屏的过程中出现一个诡异的抖动,那么问题来了,fullScreen到底做了什么,和之前的present 有和区别呢
这篇文章写的还是挺详细的
A-B 的情况下,用fullScreen的话 会调用presentedViewController的viewlayoutsubviews导致重新布局 有一个切换 闪一下
这里有两个方案
fullScreen模式下 在页面A里拦截一下这种情况下 拦截一下页面
使用overFullScreen 模式,但这个模式在横竖屏下会引发一系列连锁反应,系统不会帮你强制竖屏,当你presentingViewcontroller里实现了
相关代理之后,他能够根据当前window来实现页面的横竖屏转换,到这里 ,如果你的需求已经满足了,那么恭喜你,你已经成功了。下面内容可以忽略了~
因为用到了键盘和UIMenuController,而这两个东西并不在当前 application的keywindow上,下面可以看到,而我们要用到的键盘和Menu其实都是依附于UITextEffectsWindow上的
当我们使用overFullScreent的style,横屏进入页面的时候,系统其实并不会将 UITextEffectsWindow 这个window自动旋转为竖屏,系统判定当前仍然是横屏,name键盘和menu仍然是按照横屏的高度去计算的,这就会有问题,针对这种case,目前用了一个比较迂回(一个坑一个坑去填)的解决办法。
以上希望能够帮助到有需要的朋友,有问题进一步沟通~
前提: APP全局强制竖屏且不支持横屏!在部分页面如果打开横竖屏开关,则支持横竖屏动态切换;如果关闭,则需要点击才能跳转横屏页面。
设备在控制页面打开横竖屏开关,即设备支持横竖屏动态切换。
下图做了个简单的gif展现,下图的操作是操作手机横竖屏的结果
下面说一下强制横屏的处理办法
强制横屏就是在设备仅支持竖屏的前提下