zoukankan      html  css  js  c++  java
  • ios 6和 ios 7适配问题,让程序同一时候支持iOS 6和iOS 7,setEdgesForExtendedLayout

    因为各种原因。我们的程序须要同一时候支持iOS 7以及之前的版本号(比如iOS 6)。也就是说开发人员不得不同一时候在iOS 7和iOS 6之间进行开发。实际上开发人员对此是比較讨厌的。

    iOS 7中的布局问题

    以下是很easy的一个程序,执行在iOS 6中的界面:

    而要是执行在iOS 7的模拟器中。会看不到label了:

    这是为什么呢?我们对其reveal一下看看吧:

    从上图能够看出,实际上label躲在NavigationBar后面了。

    在iOS 7中,苹果引入了一个新的属性。叫做[UIViewController setEdgesForExtendedLayout:]。它的默认值为UIRectEdgeAll。当你的容器是navigation controller时。默认的布局将从navigation bar的顶部開始。这就是为什么全部的UI元素都往上漂移了44pt。

    修复这个问题的高速方法就是在方法- (void)viewDidLoad中加入例如以下一行代码:

    1
    
    self.edgesForExtendedLayout = UIRectEdgeNone;
    

    这样问题就修复了。

    iOS 6执行异常

    如今假设在iOS 6中执行程序,会遇到以下这种执行时异常错误:

    1
    
    [LAViewController setEdgesForExtendedLayout:]: unrecognized selector sent to instance 0x778a210
    

    全部仅仅能在iOS 7中执行的API须要又一次封装一下,例如以下代码所看到的:

    1
    2
    3
    4
    
    if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)])
    {
        self.edgesForExtendedLayout = UIRectEdgeNone;
    }
    

    Xcode 4编译错误

    有些机器可能还在使用Xcode 4.6,当用4.6来编译代码时,会遇到以下的编译错误:

    1
    2
    
    Property 'edgesForExtendedLayout' not found on object of type 'LAViewController *'
    Use of undeclared identifier 'UIRectEdgeNone'
    

    为了避免这个错误。能够创建以下的这个宏:

    1
    2
    3
    
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
    #define IOS7_SDK_AVAILABLE 1
    #endif
    

    然后在须要的地方将iOS 7的代码包装一下就可以:

    1
    2
    3
    
    #ifdef IOS7_SDK_AVAILABLE
    ...
    #endif
    

    UILabel不一致的background

    对于UILabel。在iOS 7中它的background颜色默认是clearColor,而在iOS 6中默认的是白色。

    所以。我们最好在代码中对label的background颜色进行明白的设置:

    1
    
    view.backgroundColor = [UIColor clearColor];
    

    全屏时隐藏状态栏

    在iOS 6中。当调用presentViewController时,默认的modal screen将是全屏(UIModalPresentationFullScreen)。为了在iOS 7中也能获得同样的效果。我们能够在modal controller中加入例如以下代码:

    1
    2
    3
    4
    
    - (BOOL)prefersStatusBarHidden
    {
      return YES;
    }
    

    UIToolbar barStyle

    有时候,我们会将UIToolbar与系统键盘结合起来使用。而在iOS 6中的键盘是黝黑色的。此时toolbar的style一般也是类似的,例如以下代码所看到的:

    1
    
    self.barStyle = UIBarStyleBlack;// or UIBarStyleBlackTranslucents
    

    而在iOS 7中。键盘变为了亮色,因此我们须要依据不同的iOS 版本号,设置不同的bar style。

    1
    2
    3
    4
    5
    6
    7
    8
    
    if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
    {
        self.barStyle = UIBarStyleDefault;
    }
    else
    {
        self.barStyle = UIBarStyleBlack;//or UIBarStyleBlackTranslucent
    }
    

    很多其它

    上面这些技巧是我眼下在开发中遇到的,肯定还有很多其它的技巧,大家要是知道的话能够告诉我。

    最后送大家一个图。看看相关差异吧:

  • 相关阅读:
    [多项式算法](Part 1)FFT 快速傅里叶变换 学习笔记
    [多项式算法](Part 4)FWT 快速沃尔什变换 学习笔记
    [多项式算法](Part 2)NTT 快速数论变换 学习笔记
    [多项式算法](Part 5)分治FFT 学习笔记
    [HDU4316]Mission Impossible(计算几何/凸包/半平面交)
    NOI2019 游记 | 在NOI寻求AC是否搞错了什么?
    [Android] Activity的四种launchMode
    [Android] CardView的使用及兼容
    [Android] 记录相对位置布局
    [Android] ConstraintLayout
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7144952.html
Copyright © 2011-2022 走看看