UIView(FWAutoLayout)
@interface UIView (FWAutoLayout)
UIView自动布局分类,兼容UIView和UILayoutGuide(iOS9)
Note
如果约束条件完全相同,会自动更新约束而不是重新添加。 另外,默认布局方式使用LTR,如果需要RTL布局,可通过fwAutoLayoutRTL统一启用-
是否启用自动布局适配RTL,启用后自动将Left|Right转换为Leading|Trailing,默认NO
Note
如果项目兼容阿拉伯语等,需要启用RTL从右向左布局,开启此开关即可,无需修改布局代码 手工切换视图左右布局方法:[UIView appearance].semanticContentAttribute = UISemanticContentAttributeForceRightToLeft;Declaration
Objective-C
@property (class, nonatomic) BOOL fw_autoLayoutRTL;
-
是否全局自动等比例缩放布局,默认NO
Note
启用后所有offset值都会自动*relativeScale,注意可能产生的影响。 启用后注意事项:- 屏幕宽度约束不能使用screenWidth约束,需要使用375设计标准
- 尽量不使用screenWidth固定屏幕宽度方式布局,推荐相对于父视图布局
- 只会对offset值生效,其他属性不受影响
- 如需特殊处理,可以指定某个视图关闭该功能
Declaration
Objective-C
@property (class, nonatomic) BOOL fw_autoScale;
-
视图是否自动等比例缩放布局,默认返回全局开关
Declaration
Objective-C
@property (nonatomic) BOOL fw_autoScale;
-
是否启用自动布局
Declaration
Objective-C
@property (nonatomic) BOOL fw_autoLayout;
-
执行子视图自动布局,自动计算子视图尺寸。需先将视图添加到界面(如设置为tableHeaderView),再调用即可(iOS8+)
Declaration
Objective-C
- (void)fw_autoLayoutSubviews;
-
计算动态布局视图指定宽度时的高度。使用AutoLayout必须约束完整,不使用AutoLayout会调用view的sizeThatFits:方法
Declaration
Objective-C
- (CGFloat)fw_layoutHeightWithWidth:(CGFloat)width;
-
计算动态布局视图指定高度时的宽度。使用AutoLayout必须约束完整,不使用AutoLayout会调用view的sizeThatFits:方法
Declaration
Objective-C
- (CGFloat)fw_layoutWidthWithHeight:(CGFloat)height;
-
设置水平方向抗压缩优先级
Declaration
Objective-C
@property (nonatomic) UILayoutPriority fw_compressionHorizontal;
-
设置垂直方向抗压缩优先级
Declaration
Objective-C
@property (nonatomic) UILayoutPriority fw_compressionVertical;
-
设置水平方向抗拉伸优先级
Declaration
Objective-C
@property (nonatomic) UILayoutPriority fw_huggingHorizontal;
-
设置垂直方向抗拉伸优先级
Declaration
Objective-C
@property (nonatomic) UILayoutPriority fw_huggingVertical;
-
设置视图是否收缩,默认NO,YES时常量值为0,NO时常量值为原始值
Declaration
Objective-C
@property (nonatomic) BOOL fw_collapsed;
-
设置视图是否自动收缩,如image为nil,text为nil、@“"时自动收缩,默认NO
Declaration
Objective-C
@property (nonatomic) BOOL fw_autoCollapse;
-
设置视图是否隐藏时自动收缩、显示时自动展开,默认NO
Declaration
Objective-C
@property (nonatomic) BOOL fw_hiddenCollapse;
-
添加视图的收缩常量,必须先添加才能生效
Declaration
Objective-C
- (void)fw_addCollapseConstraint:(nonnull NSLayoutConstraint *)constraint;
-
父视图居中
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_alignCenterToSuperview;
Return Value
约束数组
-
父视图居中偏移指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_alignCenterToSuperviewWithOffset: (CGPoint)offset;
Parameters
offset
偏移距离
Return Value
约束数组
-
父视图属性居中
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_alignAxisToSuperview:(NSLayoutAttribute)axis;
Parameters
axis
居中属性
Return Value
布局约束
-
父视图属性居中偏移指定距离
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_alignAxisToSuperview:(NSLayoutAttribute)axis withOffset:(CGFloat)offset;
Parameters
axis
居中属性
offset
偏移距离
Return Value
布局约束
-
与另一视图居中相同
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_alignAxis:(NSLayoutAttribute)axis toView:(nonnull id)otherView;
Parameters
axis
居中属性
otherView
另一视图或UILayoutGuide,下同
Return Value
布局约束
-
与另一视图居中偏移指定距离
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_alignAxis:(NSLayoutAttribute)axis toView:(nonnull id)otherView withOffset:(CGFloat)offset;
Parameters
axis
居中属性
otherView
另一视图
offset
偏移距离
Return Value
布局约束
-
与另一视图居中指定比例
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_alignAxis:(NSLayoutAttribute)axis toView:(nonnull id)otherView withMultiplier:(CGFloat)multiplier;
Parameters
axis
居中属性
otherView
另一视图
multiplier
指定比例
Return Value
布局约束
-
与父视图四条边属性相同
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinEdgesToSuperview;
Return Value
约束数组
-
与父视图四条边属性距离指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinEdgesToSuperviewWithInsets: (UIEdgeInsets)insets;
Parameters
insets
指定距离insets
Return Value
约束数组
-
与父视图三条边属性距离指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *) fw_pinEdgesToSuperviewWithInsets:(UIEdgeInsets)insets excludingEdge:(NSLayoutAttribute)edge;
Parameters
insets
指定距离insets
edge
排除的边
Return Value
约束数组
-
与父视图水平方向两条边属性相同
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinHorizontalToSuperview;
Return Value
约束数组
-
与父视图水平方向两条边属性偏移指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinHorizontalToSuperviewWithInset: (CGFloat)inset;
Parameters
inset
偏移距离
Return Value
约束数组
-
与父视图垂直方向两条边属性相同
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinVerticalToSuperview;
Return Value
约束数组
-
与父视图垂直方向两条边属性偏移指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinVerticalToSuperviewWithInset: (CGFloat)inset;
Parameters
inset
偏移距离
Return Value
约束数组
-
与父视图边属性相同
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdgeToSuperview:(NSLayoutAttribute)edge;
Parameters
edge
指定边属性
Return Value
布局约束
-
与父视图边属性偏移指定距离
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdgeToSuperview:(NSLayoutAttribute)edge withInset:(CGFloat)inset;
Parameters
edge
指定边属性
inset
偏移距离
Return Value
布局约束
-
与父视图边属性偏移指定距离,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdgeToSuperview:(NSLayoutAttribute)edge withInset:(CGFloat)inset relation: (NSLayoutRelation)relation;
Parameters
edge
指定边属性
inset
偏移距离
relation
约束关系
Return Value
布局约束
-
与指定视图边属性相同
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdge:(NSLayoutAttribute)edge toEdge:(NSLayoutAttribute)toEdge ofView:(nonnull id)otherView;
Parameters
edge
指定边属性
toEdge
另一视图边属性
otherView
另一视图
Return Value
布局约束
-
与指定视图边属性偏移指定距离
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdge:(NSLayoutAttribute)edge toEdge:(NSLayoutAttribute)toEdge ofView:(nonnull id)otherView withOffset:(CGFloat)offset;
Parameters
edge
指定边属性
toEdge
另一视图边属性
otherView
另一视图
offset
偏移距离
Return Value
布局约束
-
与指定视图边属性偏移指定距离,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdge:(NSLayoutAttribute)edge toEdge:(NSLayoutAttribute)toEdge ofView:(nonnull id)otherView withOffset:(CGFloat)offset relation:(NSLayoutRelation)relation;
Parameters
edge
指定边属性
toEdge
另一视图边属性
otherView
另一视图
offset
偏移距离
relation
约束关系
Return Value
布局约束
-
父视图安全区域居中。iOS11以下使用Superview实现,下同
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_alignCenterToSafeArea;
Return Value
约束数组
-
父视图安全区域居中偏移指定距离。iOS11以下使用Superview实现,下同
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_alignCenterToSafeAreaWithOffset: (CGPoint)offset;
Parameters
offset
偏移距离
Return Value
约束数组
-
父视图安全区域属性居中
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_alignAxisToSafeArea:(NSLayoutAttribute)axis;
Parameters
axis
居中属性
Return Value
布局约束
-
父视图安全区域属性居中偏移指定距离
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_alignAxisToSafeArea:(NSLayoutAttribute)axis withOffset:(CGFloat)offset;
Parameters
axis
居中属性
offset
偏移距离
Return Value
布局约束
-
与父视图安全区域四条边属性相同
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinEdgesToSafeArea;
Return Value
约束数组
-
与父视图安全区域四条边属性距离指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinEdgesToSafeAreaWithInsets: (UIEdgeInsets)insets;
Parameters
insets
指定距离insets
Return Value
约束数组
-
与父视图安全区域三条边属性距离指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *) fw_pinEdgesToSafeAreaWithInsets:(UIEdgeInsets)insets excludingEdge:(NSLayoutAttribute)edge;
Parameters
insets
指定距离insets
edge
排除的边
Return Value
约束数组
-
与父视图安全区域水平方向两条边属性相同
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinHorizontalToSafeArea;
Return Value
约束数组
-
与父视图安全区域水平方向两条边属性偏移指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinHorizontalToSafeAreaWithInset: (CGFloat)inset;
Parameters
inset
偏移距离
Return Value
约束数组
-
与父视图安全区域垂直方向两条边属性相同
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinVerticalToSafeArea;
Return Value
约束数组
-
与父视图安全区域垂直方向两条边属性偏移指定距离
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_pinVerticalToSafeAreaWithInset: (CGFloat)inset;
Parameters
inset
偏移距离
Return Value
约束数组
-
与父视图安全区域边属性相同
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdgeToSafeArea:(NSLayoutAttribute)edge;
Parameters
edge
指定边属性
Return Value
布局约束
-
与父视图安全区域边属性偏移指定距离
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdgeToSafeArea:(NSLayoutAttribute)edge withInset:(CGFloat)inset;
Parameters
edge
指定边属性
inset
偏移距离
Return Value
布局约束
-
与父视图安全区域边属性偏移指定距离,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_pinEdgeToSafeArea:(NSLayoutAttribute)edge withInset:(CGFloat)inset relation:(NSLayoutRelation)relation;
Parameters
edge
指定边属性
inset
偏移距离
relation
约束关系
Return Value
布局约束
-
设置宽高尺寸
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_setDimensionsToSize:(CGSize)size;
Parameters
size
尺寸大小
Return Value
约束数组
-
设置某个尺寸
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_setDimension:(NSLayoutAttribute)dimension toSize:(CGFloat)size;
Parameters
dimension
尺寸属性
size
尺寸大小
Return Value
布局约束
-
设置某个尺寸,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_setDimension:(NSLayoutAttribute)dimension toSize:(CGFloat)size relation:(NSLayoutRelation)relation;
Parameters
dimension
尺寸属性
size
尺寸大小
relation
约束关系
Return Value
布局约束
-
与视图自身尺寸属性指定比例
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_matchDimension:(NSLayoutAttribute)dimension toDimension:(NSLayoutAttribute)toDimension withMultiplier:(CGFloat)multiplier;
Parameters
dimension
尺寸属性
toDimension
目标尺寸属性
multiplier
指定比例
Return Value
布局约束
-
与视图自身尺寸属性指定比例,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_matchDimension:(NSLayoutAttribute)dimension toDimension:(NSLayoutAttribute)toDimension withMultiplier:(CGFloat)multiplier relation:(NSLayoutRelation)relation;
Parameters
dimension
尺寸属性
toDimension
目标尺寸属性
multiplier
指定比例
relation
约束关系
Return Value
布局约束
-
与指定视图尺寸属性相同
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_matchDimension:(NSLayoutAttribute)dimension toDimension:(NSLayoutAttribute)toDimension ofView:(nonnull id)otherView;
Parameters
dimension
尺寸属性
toDimension
目标尺寸属性
otherView
目标视图
Return Value
布局约束
-
与指定视图尺寸属性相差指定大小
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_matchDimension:(NSLayoutAttribute)dimension toDimension:(NSLayoutAttribute)toDimension ofView:(nonnull id)otherView withOffset:(CGFloat)offset;
Parameters
dimension
尺寸属性
toDimension
目标尺寸属性
otherView
目标视图
offset
相差大小
Return Value
布局约束
-
与指定视图尺寸属性相差指定大小,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_matchDimension:(NSLayoutAttribute)dimension toDimension:(NSLayoutAttribute)toDimension ofView:(nonnull id)otherView withOffset:(CGFloat)offset relation:(NSLayoutRelation)relation;
Parameters
dimension
尺寸属性
toDimension
目标尺寸属性
otherView
目标视图
offset
相差大小
relation
约束关系
Return Value
布局约束
-
与指定视图尺寸属性指定比例
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_matchDimension:(NSLayoutAttribute)dimension toDimension:(NSLayoutAttribute)toDimension ofView:(nonnull id)otherView withMultiplier:(CGFloat)multiplier;
Parameters
dimension
尺寸属性
toDimension
目标尺寸属性
otherView
目标视图
multiplier
指定比例
Return Value
布局约束
-
与指定视图尺寸属性指定比例,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *)fw_matchDimension:(NSLayoutAttribute)dimension toDimension:(NSLayoutAttribute)toDimension ofView:(nonnull id)otherView withMultiplier:(CGFloat)multiplier relation:(NSLayoutRelation)relation;
Parameters
dimension
尺寸属性
toDimension
目标尺寸属性
otherView
目标视图
multiplier
指定比例
relation
约束关系
Return Value
布局约束
-
与指定视图属性相同
Declaration
Objective-C
- (nonnull NSLayoutConstraint *) fw_constrainAttribute:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
Return Value
布局约束
-
与指定视图属性偏移指定距离
Declaration
Objective-C
- (nonnull NSLayoutConstraint *) fw_constrainAttribute:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView withOffset:(CGFloat)offset;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
offset
偏移距离
Return Value
布局约束
-
与指定视图属性偏移指定距离,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *) fw_constrainAttribute:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView withOffset:(CGFloat)offset relation:(NSLayoutRelation)relation;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
offset
偏移距离
relation
约束关系
Return Value
布局约束
-
与指定视图属性指定比例
Declaration
Objective-C
- (nonnull NSLayoutConstraint *) fw_constrainAttribute:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView withMultiplier:(CGFloat)multiplier;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
multiplier
指定比例
Return Value
布局约束
-
与指定视图属性指定比例,指定关系
Declaration
Objective-C
- (nonnull NSLayoutConstraint *) fw_constrainAttribute:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView withMultiplier:(CGFloat)multiplier relation:(NSLayoutRelation)relation;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
multiplier
指定比例
relation
约束关系
Return Value
布局约束
-
修改最近一批添加或更新的布局约束偏移值
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_setOffset:(CGFloat)offset;
-
修改最近一批添加或更新的布局约束内间距值
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_setInset:(CGFloat)inset;
-
修改最近一批添加或更新的布局约束优先级
Declaration
Objective-C
- (nonnull NSArray<NSLayoutConstraint *> *)fw_setPriority: (UILayoutPriority)priority;
-
获取添加的与父视图属性的约束
Declaration
Objective-C
- (nullable NSLayoutConstraint *)fw_constraintToSuperview: (NSLayoutAttribute)attribute;
Parameters
attribute
指定属性
Return Value
布局约束
-
获取添加的与父视图属性的约束,指定关系
Declaration
Objective-C
- (nullable NSLayoutConstraint *) fw_constraintToSuperview:(NSLayoutAttribute)attribute relation:(NSLayoutRelation)relation;
Parameters
attribute
指定属性
relation
约束关系
Return Value
布局约束
-
获取添加的与父视图安全区域属性的约束
Declaration
Objective-C
- (nullable NSLayoutConstraint *)fw_constraintToSafeArea: (NSLayoutAttribute)attribute;
Parameters
attribute
指定属性
Return Value
布局约束
-
获取添加的与父视图安全区域属性的约束,指定关系
Declaration
Objective-C
- (nullable NSLayoutConstraint *) fw_constraintToSafeArea:(NSLayoutAttribute)attribute relation:(NSLayoutRelation)relation;
Parameters
attribute
指定属性
relation
约束关系
Return Value
布局约束
-
获取添加的与指定视图属性的约束
Declaration
Objective-C
- (nullable NSLayoutConstraint *)fw_constraint:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
Return Value
布局约束
-
获取添加的与指定视图属性的约束,指定关系
Declaration
Objective-C
- (nullable NSLayoutConstraint *)fw_constraint:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView relation:(NSLayoutRelation)relation;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
relation
约束关系
Return Value
布局约束
-
获取添加的与指定视图属性指定比例的约束
Declaration
Objective-C
- (nullable NSLayoutConstraint *)fw_constraint:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView withMultiplier:(CGFloat)multiplier;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
multiplier
指定比例
Return Value
布局约束
-
获取添加的与指定视图属性指定比例的约束,指定关系
Declaration
Objective-C
- (nullable NSLayoutConstraint *)fw_constraint:(NSLayoutAttribute)attribute toAttribute:(NSLayoutAttribute)toAttribute ofView:(nullable id)otherView withMultiplier:(CGFloat)multiplier relation:(NSLayoutRelation)relation;
Parameters
attribute
指定属性
toAttribute
目标视图属性
otherView
目标视图
multiplier
指定比例
relation
约束关系
Return Value
布局约束
-
设置约束保存键名,方便更新约束常量
Declaration
Objective-C
- (void)fw_setConstraint:(nullable NSLayoutConstraint *)constraint forKey:(nonnull id<NSCopying>)key;
Parameters
constraint
布局约束
key
保存key
-
获取键名对应约束
Declaration
Objective-C
- (nullable NSLayoutConstraint *)fw_constraintForKey:(nonnull id<NSCopying>)key;
Parameters
key
保存key
Return Value
布局约束
-
最近一批添加或更新的布局约束
Declaration
Objective-C
@property (nonatomic, copy, readonly) NS_REFINED_FOR_SWIFT NSArray<NSLayoutConstraint *> *fw_lastConstraints;
-
最近一条添加或更新的布局约束
Declaration
Objective-C
@property (nonatomic, readonly, nullable) NSLayoutConstraint *fw_lastConstraint;
-
获取当前所有约束,不包含Key
Declaration
Objective-C
@property (nonatomic, copy, readonly) NS_REFINED_FOR_SWIFT NSArray<NSLayoutConstraint *> *fw_allConstraints;
Return Value
约束列表
-
移除当前指定约束,不包含Key
Declaration
Objective-C
- (void)fw_removeConstraint:(nonnull NSLayoutConstraint *)constraint;
-
移除当前所有约束,不包含Key
Declaration
Objective-C
- (void)fw_removeAllConstraints;