自动布局Autoresizing autolayout VFL

本文详细介绍了屏幕适配技术的发展历程,从autoresizing到autolayout再到sizeclass,并深入探讨了autolayout的核心概念和使用方法,包括约束参照、VFL语言等关键知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

屏幕适配发展历程:

代码计算 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语句中用到的控件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值