zoukankan      html  css  js  c++  java
  • UILabel的autolayout~

    首先新建一个项目,拖一个label进来,然后让numberofLines = 0

    然后再控制器里面写上

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            _label.text = @"aaaaaaaaaaaasfeaqrgrthrwthwrtyjhwryjwryjwryjwryjwryjwryjwryjwrytjwryjwrytjwrytjwrtjwrtyjwrtjwrtjqwrtjwrtjhwrtjhetjrthjqwrthjqrthqrthjqrtjhqrtjhqarthjqethjteqathqtehqthqathqrthqrtjhq";
        });

    运行,效果如下

    没有添加约束的情况下,给UILabel设置过长的内容不会改变他的frame

    2.添加顶部约束和左部约束两个约束

    再次运行

    会发现下面的结果

    label被拉长了,而且我们打印出其frame可以看出,其拉伸的非常长,1385.5;其实已经可以猜到,这差不多是设置的文字的总长度

    ,或者你可以用系统的API计算一下.

    3.现在添加上左右三个方向的约束,如下图

    再次运行程序,你会发现label没有变宽,但是自己变高了

    如下图

    同理,如果你添加了上下左约束,label就会高度不变,长度变长,总之label会向没有约束的地方延伸,具体向,而且优先横向延伸,并且横向延伸的情况下,label的文字始终是一行,及时label高度足够,也不会变成多行

    4.再回到第二种情况,如果label只添加了上左约束,此时设置超过label长度的文字label是会在横向上无线延伸的,但是有一个属性

    preferredMaxLayoutWidth可以来设置,label计算高度时所用的最大宽度(autolayout下并且label的numberOfLines = 0的情况下才生效)

    也可以在IB里面设置,如下

    在里面填写一个数值.然后将后面的勾选框勾上,此时在运行程序

    label虽然没有设置右侧约束(或者宽度约束),但label得宽度不是横向无限延伸了,而是按照刚才填写的值进行横向延伸,并且也会自动变为多行,且自适应内容了

    此时preferredMaxLayoutWidth限制的数值为200,我们现在给label加上右侧限制,距离父控件10个单位长度

    此时运行结果如下

    此时我们可以看到这种情况下,label的宽度是根据autolayout设置的约束来决定的,而高度则是根据设置的preferredMaxLayoutWidth = 200,来计算的,所以label上下出现了margin

  • 相关阅读:
    spring reference
    Connector for Python
    LDAP
    REST
    java利用泛型实现不同类型可变参数
    java细节知识
    事务隔离的级别
    servlet cdi注入
    session and cookie简析
    CORS’s source, principle and implementation
  • 原文地址:https://www.cnblogs.com/xyzaijing/p/4191983.html
Copyright © 2011-2022 走看看