zoukankan      html  css  js  c++  java
  • iOS开发-Autolayout小结

    昨天重点学习了下Autolayout,把以前没有吃透的概念重新理解了下,现在感觉整个人都是棒棒哒。

    上一个项目是使用计算坐标代码的方式来布局UI界面,这种方式的缺点在于当苹果发布新尺寸设备时需要重写代码来适配。

    Autolayout的思想和安卓的相对布局比较像,通过设置控件与其父控件、相邻控件之间的关系来确定其位置、大小。

    即使苹果推出新尺寸设备,Autolayout也能适应新的屏幕,因为它所有的设置都是相对的。

    • AutoResizing

      在Autolayout之前,有AutoResizing可以作屏幕适配,但局限性比较大,有些任务无法完成(两等分屏幕)

    • Autolayout

      1. Autolayout的2个核心概念:参照和约束

      • 参照:参照的对象
      • 约束:对控件位置大小的约束

      2. Autolayout的警告和错误

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

      3.代码实现Autolayout

        之前在学习使用Autolayout时都是在storyboard中拖拖拽拽,很多原理都没有理解,导致在页面布局时会有很多地方没有思路去实现。

        拖拽的方式归根到底还是会转化成代码,通过代码实现Autolayout能知其所以然。

      • 代码实现Autolayout的步骤

        1. 利用NSLayoutConstraint类创建具体的约束对象
        2. 添加约束对象到相应的view上

              - (void)addConstraint:(NSLayoutConstraint *)constraint;

              - (void)addConstraints:(NSArray *)constraints;

      • 代码实现Autolayout的注意点
        1. 要先禁止autoresizing功能,设置view的下面属性为NO(view.translatesAutoresizingMaskIntoConstraints = NO)
        2. 添加约束之前,一定要保证相关控件都已经在各自的父控件上
        3. 不用再给view设置frame
      • NSLayoutConstraint

          一个NSLayoutConstraint对象就代表一个约束

          创建约束对象的常用方法:

    +(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;
    view1 :要约束的控件
    attr1 :约束的类型(做怎样的约束)
    relation :与参照控件之间的关系
    view2 :参照的控件
    attr2 :约束的类型(做怎样的约束)
    multiplier :乘数
    c :常量
    

          自动布局有个核心公式

          obj1.property1 =(obj2.property2 * multiplier)+ constant value

      • 添加约束的规则

          在创建约束之后,需要将其添加到作用的view上

          在添加时要注意目标view需要遵循以下规则:

          1)对于两个同层级view之间的约束关系,添加到它们的父view上

      

          

          2)对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上
          
          3)对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上

          通过代码方式来添加Autolayout会比较繁琐,每个约束都需要实例化一个NSLayoutConstraint对象,然后添加到对应的view上,一个简单的需求需要写很多代码才能实现,无论从生理上还是心理上都是拒绝的。

      下面一篇博客 我将会对VFL(Visual Format Language)进行介绍,它是苹果为简化Autolayout的编码而推出的抽象语言

    如果觉得写的好不错,打赏点买个饮料

    网上写的比较好的关于Autolayout的帖子:

    http://ued.ctrip.com/blog/?p=3736#

    http://lvwenhan.com/ios/441.html

    http://mathewsanders.com/designing-adaptive-layouts-for-iphone-6-plus/

  • 相关阅读:
    zookeeper和Eureka对CAP理论的支持
    redis缓存穿透、缓存击穿、缓存雪崩
    CAP原则和BASE理论
    bin log、redo log、undo log和MVVC
    在ROS中使用Python3
    Windows下使用AutoSSH,并作为服务自启动(不用安装Cygwin)
    回收站的正确使用方法
    Windows下好用到必须开机自启的小工具
    PreferenceScreen监听子项的刷新
    安卓普通类通过classloader访问资源文件
  • 原文地址:https://www.cnblogs.com/feiling/p/4745177.html
Copyright © 2011-2022 走看看