• iOS中文API之NSLayoutconstraint


      AutoLayout为开发者提供了一种不同于传统对于UI元素位置指定的布局方法。以前,不论是在IB里拖放,还是在代码中写,每个UIView都会有自己的frame属性,来定义其在当前视图中的位置和尺寸。使用AutoLayout的话,就变为了使用约束条件来定义view的位置和尺寸。这样的最大好处是一举解决了不同分辨率和屏幕尺寸下view的适配问题,另外也简化了旋转时view的位置的定义,原来在底部之上10像素居中的view,不论在旋转屏幕或是更换设备(iPad或者iPhone5或者以后可能出现的mini iPad)的时候,始终还在底部之上10像素居中的位置,不会发生变化。

      约束定义了两个用户借口之间的关系,通过创建约束来满足我们的要求(可见控件在布局系统中的位置和尺寸)。每个约束是一个线性方程,具有以下格式:

      item1.attribute1 = multiplier × item2.attribute2 + constant

      在这个方程式中,attribute1 和 attribute2 是自动布局可以调整时解决这些制约因素的变量。当你创建约束定义其他值。例如,如果您定义两个按钮的相对位置,第二个按钮的起始位置距离第一个按钮结束位置后8像素点。这种关系为线性方程如下所示:      

      button2.leading = 1.0 × button1.trailing + 8.0

      另外。约束并不局限于平等关系。它们还可以使用大于或等于 (> =) 或小于或等于 (< =) 来描述这两个属性之间的关系。约束还具有 1 到 1000 之间的优先级。具有优先级 1000 的约束是必需的。小于 1,000 的所有优先级是可选的。默认情况下,所有约束都是需要 (优先级 = 1,000)。在解决所要的约束后,AutoLayout将从最高到最低的优先级顺序来处理所有可选约束,如果它不能解决一个可选的约束,它将尝试来作为尽可能接近所需的结果,然后移动到下一个约束。这种不平等、 平等和优先级的结合给你强大的灵活性。通过结合多个约束,您可以定义动态地适应用户界面元素在屏幕中的大小和位置。

      创建约束

      + (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(nullable NSDictionary<NSString *,id> *)metrics views:(NSDictionary<NSString *, id> *)views

      通过VFL描述创建约束

    参数:

    format

    约束的格式规范.

    opts

    选项描述多有对象的属性和布局的方向

    metrics

    在可视格式字符串中出现的约束dictionary,dictionary的key必须是NSString值,dictionary的value必须是NSNumber类型。

    views

    视图dictionary,dictionary的key必须是NSString值,dictionary的value必须是UIView对象。

    返回值:

      约束的数组

      

      +(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(nullable id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c

       通过定义给定视图的指定属性之间的关系创建约束

    参数:

    view1

    约束左侧的视图

    attr1

    约束左侧视图的属性

    relation

    约束左侧和右侧视图的关系

    view2

    约束右侧的视图

    attr2

    约束右侧视图的属性

    multiplier

    乘数

    c

    常量值

      激活或停用约束

      property (getter=isActive) BOOL active

      获取一个约束的状态。默认为NO。

      

      + (void)activateConstraints:(NSArray<NSLayoutConstraint *> *)constraints

      激活指定约束数组中的所有约束。

      + (void)deactivateConstraints:(NSArray<NSLayoutConstraint *> *)constraints

      停用指定约束数组中的所有约束。

      访问约束数据

      

      @property UILayoutPriority priority

      优先级属性。如果一个约束的优先级小于UILayoutPriorityRequired,那么这个约束是可选的。先满足高优先级的约束再可满足低优先级的约束。优先级必须是大于0且小于或等于NSLayoutPriorityRequired。

      @property(readonly, assign) id firstItem

      参与约束的第一个对象。

      @property (readonly) NSLayoutAttribute firstAttribute

      第一个对象的属性。

      @property (readonly) NSLayoutRelation relation

      约束中,2个属性的关系。

      @property (nullable, readonly, assign) id secondItem

      参数约束的第二个对象。

      @property (readonly) NSLayoutAttribute secondAttribute;

      第二个对象的属性

      枚举,常量

      NSLayoutAttribute

      对象的可视化表示形式,用于获取该约束的值的一部分。

    下篇介绍使用方法,本文结束

      

  • 相关阅读:
    Struts2中There is no Action mapped for namespace错误解决方法
    String字符串常量池简介
    main方法中参数"String[ ] args"详解
    自定义异常基本用法
    finally关键字执行的底层原理
    Linux环境下安装mysql5.6(二进制包不是rpm格式)
    finalize关键字小结
    "=="和equals小结
    super关键字小结(构造方法的执行是不是一定会创建对象?)
    冒泡排序
  • 原文地址:https://www.cnblogs.com/salam/p/5063711.html
Copyright © 2020-2023  润新知