UIKit框架(8)屏幕适配(二)

   <李>

<强>自动布局介绍

自动布局的功能要比AutoResizing强大的多。

,,,,,当对一个UIView对象使用了自动布局布局后,意味着放弃了通过对象的帧进行修改视图的位置,尺寸。

,,,,,自动布局使约束条件,通过自动布局引擎,计算视图对象的框架。

,,,,,可以认为在自动布局视图中对象的框架是一个只读的属性。

约束的核心公式:

,,,

,,,其中methoda可以是nil

,,,除了=关系外,还可以是祝辞=& lt;=的关系



<李>

<强>代码适配

添加约束的步骤:

1)禁止被适配视图的AutoResizing功能

安康;translatesAutoresizingMaskIntoConstraints (BOOL)   安康;(空白)setTranslatesAutoresizingMaskIntoConstraints:(BOOL)标记

2)创建约束对象NSLayoutConstraint

+,(instancetype) constraintWithItem: (id) view1 属性:(NSLayoutAttribute) attr1  relatedBy: (NSLayoutRelation) relation  toItem: (id) view2 属性:(NSLayoutAttribute) attr2 乘数:(CGFloat) multiplier 不变:c (CGFloat)

,,,参数即约束的核心公式

,,,NSLayoutRelation枚举:

enum  {   ,,NSLayoutRelationLessThanOrEqual =, 1,   ,,NSLayoutRelationEqual =, 0,   ,,NSLayoutRelationGreaterThanOrEqual =, 1,   };   typedef  NSInteger  NSLayoutRelation;

,,,NSLayoutAttribute枚举:

typedef 枚举:,NSInteger  {   ,,NSLayoutAttributeLeft =, 1,   ,,NSLayoutAttributeRight,   ,,NSLayoutAttributeTop,   ,,NSLayoutAttributeBottom,   ,,NSLayoutAttributeLeading,   ,,NSLayoutAttributeTrailing,   ,,NSLayoutAttributeWidth,   ,,NSLayoutAttributeHeight,   ,,NSLayoutAttributeCenterX,   ,,NSLayoutAttributeCenterY,   ,,NSLayoutAttributeBaseline,   ,,NSLayoutAttributeLastBaseline =, NSLayoutAttributeBaseline,   ,,NSLayoutAttributeFirstBaseline,   ,,NSLayoutAttributeLeftMargin,   ,,NSLayoutAttributeRightMargin,   ,,NSLayoutAttributeTopMargin,   ,,NSLayoutAttributeBottomMargin,   ,,NSLayoutAttributeLeadingMargin,   ,,NSLayoutAttributeTrailingMargin,   ,,NSLayoutAttributeCenterXWithinMargins,   ,,NSLayoutAttributeCenterYWithinMargins,   ,,   ,,NSLayoutAttributeNotAnAttribute =, 0}, NSLayoutAttribute;

3)在UIView对象上添加约束对象

安康;(void) addConstraint: (NSLayoutConstraint  *)约束   安康;(空白)addConstraints:(NSArray  *)约束


将约束添加到哪个视图对象上应按照以下规则:

,,,,,对于同级视图之间的约束关系,添加到它们的父控件上

,,,,,对于不同级视图之间的约束关系,添加到最近的共同父控件上

,,,,,对于有层级关系的两个观点之间约束关系,添加到层次较高的的空间上


注意:约束不能重复添加,不能缺少必要的约束

,,,添加约束的过程中非常容易出现无法计算出帧的情况


UIView的其他操作约束的方法:

安康;(NSArray  *)约束   安康;(空白)removeConstraint:(NSLayoutConstraint  *)约束   安康;(空白)removeConstraints:(NSArray  *)约束


<李>

<强>自动布局的补充

自动布局的动画:

,,,代码中如果修改了约束的数值,则执行下面的代码,就能产生相应的动画效果,

[UIView  animateWithDuration: 1.0,动画:^ {   ,,,(view  layoutIfNeeded);   }];

,,,,,哪个视图中的约束变化了,哪个视图对象调用layoutIfNeed方法

,,,,,约束的变化应在动画之前完成。


UILabel, UIButton这类显示文字的控件使用自动布局的好处:

,,,使用了恰当的约束,能够使其尺寸自动匹配。

,,,,,如设置了UILabel对象的上、左、右的规定边距,则UILabel的尺寸会根据文字自动适应。


<李>

<强>约束的VFL方式

,,,视觉形式语言,可视化格式语言,是苹果公司为了简化自动布局的编码而推出的抽象语言。

,,,,,其实不能称之为“语言”,可以认为这仅仅是一种“语法”,其目的是减少代码使用自动布局的编程量

,,,,,但实际减少的程度有限,有些约束的功能使用VFL也无法完成,但在实现一些简单约束时非常有效。

UIKit框架(8)屏幕适配(二)