美文网首页技术类iOS实践iOS
最新iOS在手机横屏的时候打开app强制竖屏

最新iOS在手机横屏的时候打开app强制竖屏

作者: 夏至_未至_ | 来源:发表于2022-02-25 11:51 被阅读0次

最近在做项目时需求是只有在某一个页面可以横竖屏来回切换 其他页面竖屏显示

遇到的问题是在手机横屏的状态下 打开app 页面是错乱的,

下面是我的解决方案
1、在Xcode中进行设置


w1.png

2、在AppDelegate.h中添加旋转属性

/**
 *  是否允许转向
 */
@property(nonatomic,assign)BOOL allowRotation; // 是否允许转向

在AppDelegate.m中添加转屏的代理方法

- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(nullable UIWindow *)window
{
    //  如果设置了allowRotation属性,支持全屏
    if (_allowRotation == YES) {
        return UIInterfaceOrientationMaskAll;
    }else{
        return UIInterfaceOrientationMaskPortrait;//默认全局不支持横屏
    }
}

3、基类navigation代码:

- (BOOL)shouldAutorotate {
    return self.topViewController.shouldAutorotate;
}
 
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return self.topViewController.supportedInterfaceOrientations;
}
 
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return self.topViewController.preferredInterfaceOrientationForPresentation;
}

4、项目里写了一个公共的UIViewController,名字为BaseViewController,创建的BaseViewController继承UIViewController 在该viewController里进行了如下设置:

-(BOOL)shouldAutorotate{
    
    return YES;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
{
    return UIInterfaceOrientationPortrait;
}

-(BOOL)shouldAutorotate这个方法是重点 如果设置为NO,在横屏手机的状态下打开app页面还是错乱的
5、如果你的应用的根控制器是TabVC,就把下面这段代码放到TabVC根控制器下,

- (BOOL)shouldAutorotate{
    return self.selectedViewController.shouldAutorotate;
}
- (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return self.selectedViewController.supportedInterfaceOrientations;
}

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return self.selectedViewController.preferredInterfaceOrientationForPresentation;
}

这里就实现了横屏状态下打开app竖屏展示的效果。
如果想在某一个页面里进行横竖屏切换,可以进行如下设置

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [SimplifyAnswerAppDelegate sharedInstance].allowRotation = YES;
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [SimplifyAnswerAppDelegate sharedInstance].allowRotation = NO;
}

[SimplifyAnswerAppDelegate sharedInstance]是我在appdelegate里面写的一个类方法,SimplifyAnswerAppDelegate是我把appDelegate进行了重新命名,具体方法实现如下:

+ (SimplifyAnswerAppDelegate *)sharedInstance {
    return (SimplifyAnswerAppDelegate *)[UIApplication sharedApplication].delegate;
}

如果是用的APPDelegate,可以这么写

AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
 appDelegate.allowRotation = NO;  // 关闭横屏仅允许竖屏

到这里就实现了前面说的所有页面默认竖屏,部分页面横屏显示的需求。

相关文章

  • 最新iOS在手机横屏的时候打开app强制竖屏

    最近在做项目时需求是只有在某一个页面可以横竖屏来回切换 其他页面竖屏显示 遇到的问题是在手机横屏的状态下 打开ap...

  • iOS:强制横屏的坑

    前段时间我们播放器强制横屏,项目设置允许竖屏,在手机不锁屏状态下,手机横屏会导致播放器强制横屏的时候会导致横屏失败...

  • iOS 部分界面强制横屏与强制竖屏

    最新屏幕强制旋转详见 强制横屏(此方法为旋转视图) 恢复竖屏

  • iOS 页面横竖屏

    当App启动的时候需要强制竖屏,进入App后允许横屏或者竖屏的解决办法: 1、修改App-Info.plist文件...

  • 横竖屏切换 (swift)

    一. 需求 APP中需要支持横屏和竖屏,并在不同的页面 可支持的屏幕旋转方向不一致 整体竖屏,部分强制横屏 整体横...

  • ios 动画竖屏切换到横屏

    在iOS APP中有个别页面需要从竖屏切换到横屏,网上有很多切屏方法,但最后大多是要调用私有API实现,强制改变设...

  • h5 video 横屏播放

    在android ios 手机上 点击 全屏 按钮 只能竖屏的 尝试 横屏播放点击全屏 按钮 不能横屏 是 因为 ...

  • 编程技巧汇总

    iOS - 强制某个页面横屏,返回竖屏:https://www.jianshu.com/p/45ca13046ee...

  • 2022-03-05

    iOS16 强制横屏(竖屏)demo CSDN(0资源分)https://download.csdn.net/do...

  • H5页面自动适应横竖屏

    对于样式: 通过html标签可强制移动端浏览器横屏或竖屏但兼容性较差,目前仅有: UC强制竖屏: QQ强制竖屏: ...

网友评论

    本文标题:最新iOS在手机横屏的时候打开app强制竖屏

    本文链接:https://www.haomeiwen.com/subject/nldxrrtx.html