视图布局约束 VFL

约束规则如下:
 
 
使用规则


|: 表示父视图


  -:表示距离


  V:  :表示垂直


  H:  :表示水平


>= :表示视图间距、宽度和高度必须大于或等于某个值


    <= :表示视图间距、宽度和高度必须小宇或等于某个值


    == :表示视图间距、宽度或者高度必须等于某个值


@  :>=、<=、==  限制   最大为  1000     优先级 1000最大 






1.|-[view]-|:  视图处在父视图的左右边缘内


2.|-[view]  :   视图处在父视图的左边缘


3.|[view]   :   视图和父视图左边对齐


4.-[view]-  :  设置视图的宽度高度


5.|-30.0-[view]-30.0-|:  表示离父视图 左右间距  30


6.[view(200.0)] : 表示视图宽度为 200.0


7.|-[view(view1)]-[view1]-| :表示视图宽度一样,并且在父视图左右边缘内


8. V:|-[view(50.0)] : 视图高度为  50


9: V:|-(==padding)-[imageView]->=0-[button]-(==padding)-| : 表示离父视图的距离


为Padding,这两个视图间距必须大于或等于0并且距离底部父视图为 padding。


10:  [wideView(>=60@700)]  :视图的宽度为至少为60 不能超过  700 ,最大为1000


11: 如果没有声明方向默认为  水平  V:
 
 

- (NSArray *)constraints NS_AVAILABLE_IOS(6_0);
对于有层次关系的两个view之间的约束关系,添加到层次较高的父级view上。


对于两个不同层级view之间的约束关系,添加到他们最近的共同父级view上。




对于两个同层级view之间的约束关系,添加到他们的父级view上。


 
六、- (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); 移除视图布局上的多个约束


十、- (void)updateConstraintsIfNeeded NS_AVAILABLE_IOS(6_0); //调用新的视图布局自动触发,更新视图布局上的约束


十一、- (void)updateConstraints NS_AVAILABLE_IOS(6_0); // 更新自定义视图布局约束


十二、- (BOOL)needsUpdateConstraints NS_AVAILABLE_IOS(6_0); 判断视图布局是否需要更新约束


13、- (void)setNeedsUpdateConstraints NS_AVAILABLE_IOS(6_0); 设置视图布局是否需要更新约束




UIButton *cancelButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
UIButton *acceptButton = [UIButton buttonWithType:UIButtonTypeCustom];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(cancelButton,acceptButton);
NSArray *demoConstraint = [NSLayoutConstraint constraintsWithVisualFormat:@"[cancelButton(72)]-12-[acceptButton(50)]" options:0 metrics:nil views:viewsDictionary]; //取消按钮宽72point,accept按钮宽50point,它们之间间距12point
NSLog(@"%@", demoConstraint);
[oneViewDemo updateConstraintsIfNeeded];
[oneViewDemo updateConstraints];
[oneViewDemo needsUpdateConstraints];
[oneViewDemo setNeedsUpdateConstraints];
[oneViewDemo  addConstraints: demoConstraint];
[oneViewDemo  addConstraint: [demoConstraint objectAtIndex:0]];
[oneViewDemo removeConstraint:[demoConstraint objectAtIndex:1]];
[oneViewDemo removeConstraints:demoConstraint];
原文地址:https://www.cnblogs.com/mumoozhu/p/4582805.html