自动布局Autoresizing autolayout VFL

来源:互联网 发布:无缝贴图软件 编辑:程序博客网 时间:2024/05/17 07:51

屏幕适配发展历程:

代码计算 frame->autoresizing(父子控件之间的关系)->autolayout(任何控件都能产生关系)-> sizeclass(对屏幕适配进行分类,真正布局还是 autolayout)

一、autoresizing:

1.两个属性:autoresizingMask,autoresizesSubviews
autoresizingMask的枚举值:

iewAutoresizingNone                 = 0,            // 不会随着父视图改变UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,    // 调整左边,保证右边UIViewAutoresizingFlexibleWidth        = 1 << 1,    // 调整宽度,保证左右UIViewAutoresizingFlexibleRightMargin  = 1 << 2,    // 调整右边,保证左边UIViewAutoresizingFlexibleTopMargin    = 1 << 3,    // 调整顶部,保证底部UIViewAutoresizingFlexibleHeight       = 1 << 4,    // 调整高度,保证上下UIViewAutoresizingFlexibleBottomMargin = 1 << 5     // 调整底部,保证底部

二、autolayout:
核心概念:约束 参照
autolayout 和 frame 一样必须设置 xywh
思路:

1> 创建控件并取消 autoresizing功能blueView.translateAutoresizingMaskIntoConstraints = NO;2> 创建约束NSLayoutConstraint *blueLeftCon = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1.0 constant:30];3> 添加约束约束一定要添加到父 View 上[self.view addConstraint:blueLeftCon];

自动布局核心公式:

blueView.NSLayoutAttributeLeft = self.view.NSLayoutAttributeLeft * 1.0 + 30;

三、VFL 语言
H:水平 V:竖直 |边界 -距离 [控件(控件宽/高)] [控件A(==控件B)]

思路:

1> 创建控件并取消 autoresizing功能blueView.translateAutoresizingMaskIntoConstraints = NO;2> 创建约束 VFL// 水平:blueView 距离父 view 左边界30,距离父 view 的右边界NSString *hVFL = @"H:|-30-[blueView]-30-|";NSArray *hCons = [NSLayoutConstraint constraintsWithVisualFormat:hVFL options:0 metrics:nil views:@{@"blueView" : blueView}];//@"V:|-30-[blueView(50)]-30-[redView(==blueView)]3> 添加约束self.view addConstraints:hCons];

注意:VFL 是不能进行算术运算的,有的话只能用 autolayout创建约束。

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;format:VFL 语句opts:约束类型metrics:VFL语句中用到的具体数值views:VFL语句中用到的控件
0 0
原创粉丝点击