美文网首页
【iOS】屏幕适配

【iOS】屏幕适配

作者: CJFeng | 来源:发表于2018-10-27 00:53 被阅读128次

    屏幕适配

    1、屏幕适配的发展过程:

    代码计算frame -> autoreszing(父控件和子控件的关系) -> autolayout(任何控件都可以产生关系) -> sizeclass

    没有屏幕适配,直接使用frame固定子控件的大小

    屏幕大小一样,但是如果进行ipad开发,就需要考虑屏幕适配

    屏幕大小不一样,需要考虑屏幕适配(使用autoresizing/autolayout实现)

    autoresizing:ios7之前经常使用

    autolayout:ios6开始出现,ios7之后大范围使用

    sizeclass:ios8开始出现,解决横竖屏和iphone、ipad共同开发

    2、autoreszing

    • 需要去除autolayout选项,因为这两个属性冲突。view的autoresizesSubviews属性为yes时(默认为yes),autoresizing才会生效

    • 从XCODE6开始,Storyboard&Xib默认是自动布局,因此我们需要手动调整,才能使用autoresizing

    • autoresizing的局限性

      它只能描述父子控件之间的布局关系,而不能描述子控件与子控件之间的布局关系

    3、autolayout

    要先禁止autoresizing功能,设置view的下面属性为NO

      view.translatesAutoresizingMaskIntoConstraints = NO;
    > 添加约束之前,一定要保证相关控件都已经在各自的父控件上
    
    > 不用再给view设置frame
    

    使用autolayout不再需要设置子控件的frame

    通过使用父子控件之间的约束 或者 子控件与子控件之间的约束进行frame的设置。

    -好处:

    你基本上可以不用考虑屏幕不同分辨率的问题,你终于可以不用在viewDidLoad方法里判断不同分辨率下,不同控件应该放在哪里,或者针对不同分辨率写不同的storyboard和xib
    你可以抛弃那些根据不同文字来计算tableViewCell、UILabel高度的代码了,因为autolayout会帮你自动计算好
    如果你的布局在横屏竖屏下变化不是特别大,你不用再为横着竖着写两套代码或者写两个storyboard/xib了

    警告和错误

      1)、警告(黄色提示)
        * 控件的frame不匹配所添加的约束, 比如比如约束控件的宽度为100, 而控件现在的宽度是110
      2)、错误(红色提示)
        * 缺乏必要的约束, 比如只约束了宽度和高度, 没有约束具体的位置
    
        * 两个约束冲突, 比如1个约束控件的宽度为100, 1个约束控件的宽度为110
    

    4、sizeclass

    仅仅是对屏幕进行了分类, 真正排布UI元素还得使用autolayout

    • 不再有横竖屏的概念, 只有屏幕尺寸的概念
    • 不再有具体尺寸的概念, 只有抽象尺寸的概念
    • 把宽度和高度各分为3种情况
    1. Compact : 紧凑(小)
    2. Any : 任意
    3. Regular : 宽松(大)
    4. 符号代表
    • : Compact
    • : Any
    • : Regular

    相关文章

      网友评论

          本文标题:【iOS】屏幕适配

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