屏幕适配的发展历史
iPhone3GS\iPhone4
- 没有屏幕适配可言
- 全部用frame、bounds、center进行布局
- 很多这样的现象:坐标值、宽度高度值全部写死
UIButton *btn1 = [[UIButton alloc] init]; btn1.frame = CGRectMake(0, 0, 320 - b, 480 - c);
iPad出现、iPhone横屏
- 出现Autoresizing技术
- 让横竖屏适配相对简单
- 让子控件可以跟随父控件的行为自动发生相应的变化
- 前提是:关闭Autolayout功能
- 局限性
- 只能解决子控件跟父控件的相对关系问题
- 不能解决兄弟控件的相对关系问题
UIViewAutoresizingNone = 0,
UIViewAutoresizingFlexibleLeftMargin = 1 << 0, 距离父控件左边的间距是伸缩的(不固定的)
UIViewAutoresizingFlexibleRightMargin = 1 << 2, 距离父控件右边的间距是伸缩的(不固定的)
UIViewAutoresizingFlexibleTopMargin = 1 << 3, 距离父控件顶部的间距是伸缩的(不固定的)
UIViewAutoresizingFlexibleBottomMargin = 1 << 5, 距离父控件底部的间距是伸缩的(不固定的)
UIViewAutoresizingFlexibleWidth = 1 << 1, 宽度跟随父控件的宽度进行自动伸缩
UIViewAutoresizingFlexibleHeight = 1 << 4, 高度跟随父控件的高度进行自动伸缩
演示代码:
#import "ViewController.h"
@interface ViewController ()
/** 蓝色 */
@property (nonatomic, strong) UIView *blueView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// 创建蓝色UIView
UIView *blueView = [[UIView alloc] init];
blueView.backgroundColor = [UIColor blueColor];
blueView.frame = CGRectMake(0, 0, 250, 250);
[self.view addSubview:blueView];
self.blueView = blueView;
// 创建红色UIView
UIView *redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
redView.frame = CGRectMake(0, 150, 250, 100);
redView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
[blueView addSubview:redView];
}
// 点击View就会自动调用
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
// 在100范围内随机产生值
CGFloat w = 200 + arc4random_uniform(100);
CGFloat h = 200 + arc4random_uniform(100);
self.blueView.frame = CGRectMake(0, 0, w, h);
}
iOS 6.0(Xcode4)开始
- 出现了Autolayout技术
- 从Xcode5.0(iOS 7.0)开始,开始流行Autolayout