• 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;

  • 相关阅读:
    从SAPI 5.1中提取中文发音引擎
    多图:你没见过的古董级PC(zz)
    难搞的证书
    原来VS.Net 2005正式版真的发布了
    Google要改进OpenOffice 并公布其搜索计算数据中心细节(zz)
    AMD CPU市占率突破20%!(zz)
    重定向页面会Alert()不了?
    忍无可忍,希望大家不要来苏州园区工作
    MSN登陆不了怎么办
    网易126免费域名去广告
  • 原文地址:https://www.cnblogs.com/DafaRan/p/7744515.html
Copyright © 2020-2023  润新知