iOS部分页面横竖屏解决方案

系统支持横屏顺序
默认读取plist里面设置的方向(优先级最高)等同于Xcode Geneal设置里面勾选
application window设置的级别次之

然后是UINavigationcontroller/UITabbarController

级别最低的是viewcontroller

(注意Xcode Geneal设置里面没有勾选的方向viewcontroller强制旋转到该方向会crash)

旋转屏幕相关的几个重要方法:

//是否能旋转屏幕

- (BOOL)shouldAutorotate {

    return YES;

}

//支持旋转的方向

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

{

    return UIInterfaceOrientationMaskAllButUpsideDown;

}

//强制旋转屏幕,私有方法 direction:UIInterfaceOrientation

NSNumber * value = [NSNumber numberWithInteger:direction];

[[UIDevice currentDevice] setValue:value forKey:@"orientation"];


几个旋转屏幕的小技巧:

1.项目中大多数页面都不支持旋转在rootViewController中shouldAutorotate方法中返回NO即可,对于支持旋转的我们使用presentViewController方法推出页面。

2.从支持旋转的页面A,push到不支持旋转的页面B 这里实现一个UINavigationController类重写一下方法:

//是否能旋转屏幕

- (BOOL)shouldAutorotate {

    return self.topViewController.shouldAutorotate;

}

//支持旋转的方向

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

{

    return self.topViewController.supportedInterfaceOrientations;

}

在B页面shouldAutorotate方法中返回NO,推出B页面之前强制旋转为竖屏即可。

3.在设备已经旋转为横屏的状态下,从竖屏A,present到支持横屏的页面B,发现推出的直接是横屏,为了交互的一致性,希望推出的还是竖屏,可以在viewDidLoad,和viewDidAppear方法中先后设置self.needAutorotate为NO,和YES

- (UIInterfaceOrientationMask)supportedInterfaceOrientations

{

    if (self.needAutorotate == YES) {

        return UIInterfaceOrientationMaskAllButUpsideDown;

    }

    return UIInterfaceOrientationMaskPortrait;

}

4.设备强制旋转后键盘弹出的方向不对,一定是supportedInterfaceOrientations返回的参数不对,调试下就ok了

5.对于一会可以自由旋转一会不能旋转的需求也是对supportedInterfaceOrientations返回参数做文章。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值