zoukankan      html  css  js  c++  java
  • ios 中的autoresizingMask

    以前对这个知识理解的不太对,看了下面这个地址的文章后,感觉说的对,也没检验,今天实验后,发现是错的。。。在这里对以前读过此文的朋友表示抱歉。

    原文地址如下:

    http://www.cnblogs.com/jiangyazhou/archive/2012/06/26/2563041.html

    他这里说的理论是错误的,我下面写出自己的理解,虽然有点地方也不严谨,但是大体正确。

     在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下)

    enum {
       UIViewAutoresizingNone                 = 0,
       UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
       UIViewAutoresizingFlexibleWidth        = 1 << 1,
       UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
       UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
       UIViewAutoresizingFlexibleHeight       = 1 << 4,
       UIViewAutoresizingFlexibleBottomMargin = 1 << 5
    };

    UIViewAutoresizingNone就是不自动调整。
    UIViewAutoresizingFlexibleLeftMargin ,如果不使用,左侧margin不会改变,也就是左顶点的x坐标不会变化。如果使用,左侧margin会变化,具体变化值在不同情况下会有所不同(成比例放大?系统会自行按一定算法调整吧。)。
    UIViewAutoresizingFlexibleRightMargin ,原理同上
    UIViewAutoresizingFlexibleTopMargin 原理同上
    UIViewAutoresizingFlexibleBottomMargin 原理同上
    UIViewAutoresizingFlexibleWidth 自动调整自己的宽度,如果不使用,宽度不会变化,如果使用,宽度跟父view等比缩放。
    UIViewAutoresizingFlexibleHeight  原理同上


    另外虽然这里的变量个数和 xib中的设置相仿,但是xib的设置并不和这里的变量一一对应。

    比如下图,autoresizingMask 是 42,就是 101010,就是没有使用UIViewAutoresizingFlexibleLeftMargin,UIViewAutoresizingFlexibleRightMargin 和UIViewAutoresizingFlexibleHeight 其他的都用了。

      


    再看一个例子,如下图:

    打印出的 view 的 autoresizingMask 属性值是 46,也就是 二进制的 101110,其实,仅仅是没有使用UIViewAutoresizingFlexibleLeftMargin,UIViewAutoresizingFlexibleHeight!剩下的都用了。


    再看一个

    这个,属性值是45,101101,就是缺少UIViewAutoresizingFlexibleHeight和UIViewAutoresizingFlexibleWidth。


    再看一个:

    属性值是18 ,010010,就是只有  UIViewAutoresizingFlexibleHeight和UIViewAutoresizingFlexibleWidth。

    这个也是让我困扰很久的问题!所以不要根据xib中的设定,想当然地写出错误的代码约束!

    看完上面这些例子,我们可以总结一下,如果你希望view的长宽需要等比放大,就需要使用UIViewAutoresizingFlexibleHeight 和UIViewAutoresizingFlexibleWidth,而如果需要把某个方向的margin固定,就不要加入对应的方向的FlexibleMargin mask ,而不需要固定的方向,就要加入对应的mask。


    另外,需要注意,再xib中的某些设定是冲突的,系统会自动去掉冲突的设置,比如,下面这种情况:

    同时限定左右距离不变,而且长度不变,这是不可能达到的要求。系统会无视右边距离不变的约束。 

  • 相关阅读:
    软件构架 课堂练习一
    《软件构架实践》阅读笔记06
    《软件构架实践》阅读笔记05
    《软件构架实践》阅读笔记04
    接口如何实现多态
    c++虚函数的作用是什么?
    java中修饰符作用范围
    Servlet生命周期
    ERP理解
    内部类和匿名内部类
  • 原文地址:https://www.cnblogs.com/breezemist/p/5036435.html
Copyright © 2011-2022 走看看