Chesterlee's Zen

Follow your heart and intuition

Autolayout中的接口释义

下文是对最新iOS8sdk中Autolayout的category接口的解释,如果有错误,希望指正,谢谢!

UIConstraintBasedLayoutInstallingConstraints—-约束的添加和删除
-(void)addConstraint:(NSLayoutConstraint *)constraint NS_AVAILABLE_IOS(6_0);    //添加约束  
-(void)addConstraints:(NSArray *)constraints NS_AVAILABLE_IOS(6_0);             //添加约束集合
-(void)removeConstraint:(NSLayoutConstraint *)constraint NS_AVAILABLE_IOS(6_0); //移除约束 
-(void)removeConstraints:(NSArray *)constraints NS_AVAILABLE_IOS(6_0);          //移除约束集合       
UIConstraintBasedLayoutCoreMethods—-约束的核心函数
-(void)updateConstraintsIfNeeded NS_AVAILABLE_IOS(6_0);  //立即更新约束
-(void)updateConstraints NS_AVAILABLE_IOS(6_0);//更新约束的接口,可以overrite来更新你特别需要更新的约束
-(BOOL)needsUpdateConstraints NS_AVAILABLE_IOS(6_0);   //查询是否当前view需要更新约束
-(void)setNeedsUpdateConstraints NS_AVAILABLE_IOS(6_0);// 标记需要更新约束,在下一个cycle的时候,run一次约束更新业务流程
UIConstraintBasedCompatibility—-约束特性的打开和关闭
//查询当前是否使用的Autoresizing 
- (BOOL)translatesAutoresizingMaskIntoConstraints NS_AVAILABLE_IOS(6_0);  

//如果手动添加约束,就需要call这个接口,默认的view是添加了autoresizing mask的,
此时需要把他关闭,把此方法的flag传递为NO即可。但是SB/Xib会自动帮你做这个事情。
仅仅手动添加约束需要。 
- (void)setTranslatesAutoresizingMaskIntoConstraints:(BOOL)flag NS_AVAILABLE_IOS(6_0);

//约束的Layout方式是lazily使用的。如果你在-updateConstraints中来初始化你的约束,
但是如果没有添加约束的话,系统就不会调用这个-updateConstraints接口。
这个就是鸡和蛋的问题,所以用这个方法在自定义的view中返回YES,表示一定要用AL来约束。
比如在一个Cell内部,如果在-updateConstraints进行了constraint的更新,添加删除等,
那么就调用此接口。  
+ (BOOL)requiresConstraintBasedLayout NS_AVAILABLE_IOS(6_0);
UIConstraintBasedLayoutLayering(baselayout)
//设置view在当前Frame下对应的alignmentRect的值,这个是AL系统回调函数  
- (CGRect)alignmentRectForFrame:(CGRect)frame NS_AVAILABLE_IOS(6_0);

//设置view在当前alignmentRect下对应的frame的值,这个是AL系统回调函数  
- (CGRect)frameForAlignmentRect:(CGRect)alignmentRect NS_AVAILABLE_IOS(6_0);

// 设置当前view计算alignment rect所需要用到UIEdgeInsets值,比较常用  
- (UIEdgeInsets)alignmentRectInsets NS_AVAILABLE_IOS(6_0); 

// 使用baseline对齐的约束layout时。当前的自定义view告诉AL到底是以本view
的哪个来做对齐的(返回当前view的subview,就以这个subview做基线对齐),
或则是本view自己(这个是默认的对齐方法情况)  
- (UIView *)viewForBaselineLayout NS_AVAILABLE_IOS(6_0);

// 默认的IntrinsicSize使用的value,为(UIViewNoIntrinsicMetric,UIViewNoIntrinsicMetric),也就是(-1, -1)// -1  
UIKIT_EXTERN const CGFloat UIViewNoIntrinsicMetric NS_AVAILABLE_IOS(6_0);

// 当前view展示其内容的最小的size
- (CGSize)intrinsicContentSize NS_AVAILABLE_IOS(6_0);

// 刷新展示其内容的最小的size,这个要自己主动call,否则系统无法检测。   
- (void)invalidateIntrinsicContentSize NS_AVAILABLE_IOS(6_0);

//获取当前view在axis方向上的抗拉伸优先级  
- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0); 

//设置当前view在axis方向上的抗拉伸优先级   
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);      

//获取当前view在axis方向上的抗压缩优先级
- (UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);  

//设置当前view在axis方向上的抗压缩优先级  
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);
UIConstraintBasedLayoutFittingSize(Autolaytou的size计算)
// 一个标记,按可以展示内容最小的压缩大小来Layout对应的size(常用)  
UIKIT_EXTERN const CGSize UILayoutFittingCompressedSize NS_AVAILABLE_IOS(6_0);  

//一个标记,按可以展示内容可扩张最大的大小来Layout对应的size,没查到是以怎样的标准来计算的  
UIKIT_EXTERN const CGSize UILayoutFittingExpandedSize NS_AVAILABLE_IOS(6_0);

//配合UILayoutFittingCompressSize和UILayoutFittingExpandedSize来使用,
在当前view的subviews的intrinsic size都可以计算的情况下,可以获取最小压缩(UILayoutFittingCompressSize)
的size或最大(UILayoutFittingExpandedSize)的size。  

- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize NS_AVAILABLE_IOS(6_0);   

//在两个方向上做不同类型的Fit size计算,相对而言,systemLayoutSizeFittingSize是在两个方向上都一致
(都是Compressed或都是Expanded)的用法。  
- (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize withHorizontalFittingPriority:(UILayoutPriority)horizontalFittingPriority verticalFittingPriority:(UILayoutPriority)verticalFittingPriority NS_AVAILABLE_IOS(8_0);
UIConstraintBasedLayoutDebugging(AutoLayout调试使用)
//影响当前方向的约束集合  
- (NSArray *)constraintsAffectingLayoutForAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);

//是否含有含糊不清的约束 
- (BOOL)hasAmbiguousLayout NS_AVAILABLE_IOS(6_0); 

//待整理  
- (void)exerciseAmbiguityInLayout NS_AVAILABLE_IOS(6_0);  

Comments