zoukankan      html  css  js  c++  java
  • iOS 横竖屏适配 笔记

     研究消息转发机制 已经一周多了,但是 还是没整理出博客, 还是先写一个 项目中遇到的 横竖屏适配问题。

    // 开启自动转屏
    - (BOOL)shouldAutorotate {
        return YES;
    }
    // 设备支持方向
    - (UIInterfaceOrientationMask)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskAll;
    }
    // 默认方向 
    - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
    return UIInterfaceOrientationPortrait;
      }
    
    

     如果是RootViewController,上面这三行是足够。 

     如果需要强制横屏,那么就需要在 -(void)viewDidLoad 中调用下面的方法;如果自动转屏是 NO, 那么这个方法不调用

    - (void)setInterfaceOrientation:(UIInterfaceOrientation)orientation {
        if ([[UIDevice currentDevice] respondsToSelector:@selector(setOrientation:)]) {
            SEL selector = NSSelectorFromString(@"setOrientation:");
            NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
            [invocation setSelector:selector];
            [invocation setTarget:[UIDevice currentDevice]];
            int val = orientation;
            [invocation setArgument:&val atIndex:2];
            [invocation invoke];
        }
    }

    如果横屏启动后,发现 有半个屏幕黑屏, 那么 你就需要使用XCode 查看UI 屏幕方向,如果屏幕是横的,那么你就需要把视图适配一个横屏的。

    在 转屏的回调中设置 适配

    - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
        
        if (size.width > size.height) { // 横屏
            // 横屏布局 
        } else {
            // 竖屏布局 
        }
    }

    或者

    - (void)layoutSubviews {
        [super layoutSubviews];
        // 通过状态栏电池图标来判断屏幕方向
        if ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationMaskPortrait) {
            // 竖屏适配
        } else {
            // 横屏适配
        }
    }

     强制横屏启动

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        [application setStatusBarOrientation:UIInterfaceOrientationLandscapeRight animated:NO];
        [window addSubview:EC_CAST(UIView,splashView)];
        [window makeKeyAndVisible];
        return YES;

  • 相关阅读:
    dayⅦ:元组、字典的其他操作+集合类型
    dayⅥ:作业
    dayⅥ:字符串操作+列表操作
    dayⅣ:赋值运算+if判断
    dayⅣ:赋值运算+if判断作业
    dayⅢ、基本数据类型+运算符
    爬虫解析bs4
    爬虫请求库之requests库
    爬虫原理
    各主流Linux系统解决方案pip安装mysqlclient报错
  • 原文地址:https://www.cnblogs.com/DafaRan/p/7744515.html
Copyright © 2011-2022 走看看