补充:iPhone6s plus 尺寸:5.5inch 分辨率:1920x1080数组
iPhone6s 尺寸:4.7inch 分辨率:1334x750
布局
Autolayout是一种“自动布局”技术,专门用来布局UI界面,能很好的解决屏幕适配的问题。Autolayout的两个核心概念,参照和约束。编码
在storyboard中处理约束的几个经常使用面板:spa
ViewControllerScene右边若是出现则说明约束没有问题了,只须要update frames就行了,若是是则说明约束有问题,多是缺少必要的约束,也多是有两个约束冲突了。code
除了能够在storyboard中添加约束,也能够在代码中给控件添加约束,可是。。。感受好麻烦啊
orm
主要就是经过NSLayoutConstraint类建立具体的约束对象,并将约束对象添加到相应的view上。对象
添加约束对象方法:ip
- (void)addConstraint:(NSLayoutConstraint *)constraint //添加单个约束 - (void)addConstraints:(NSArray<__kindof NSLayoutConstraint *> *)constraint //添加多个约束
代码实现Autolayout的注意这几点,要先禁止autoresizing功能,设置view的下面属性为NO,view.translatesAutoresizingMaskIntoConstraints = NO;it
添加约束以前,必定要保证相关控件都已经在各自的父控件上,不用再给view设置frame。io
一个NSLayoutConstraint对象就表明一个约束,建立约束的方法:
NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c];
view1 :要约束的控件
attr1 :约束的类型(作怎样的约束)
relation :与参照控件之间的关系
view2 :参照的控件
attr2 :约束的类型(作怎样的约束)
multiplier :乘数
c :常量
添加约束的规则
一、对于两个同层级view之间的约束关系,添加到它们的父view上。
二、对于两个不一样层级view之间的约束关系,添加到他们最近的共同父view上。
三、对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上。
---------------------------------------------
另外苹果官方为了简化Autolayout的编码还推出了另外一种语言,vfl(visual format language可视化格式语言)
H:[cancelButton(50)]-10-[acceptButton(50)] 表示 canelButton宽50,acceptButton宽50,它们之间间距10
V:[redView][yellowView(==redView)] 表示 竖直方向上,先有一个redView,其下方紧接一个高度等于redView高度的yellowView
使用VFL来建立约束数组
+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
format :VFL语句
opts :约束类型
metrics :VFL语句中用到的具体数值
views :VFL语句中用到的控件
建立一个字典(内部包含VFL语句中用到的控件)的快捷宏定义 NSDictionaryOfVariableBindings(...)
// 间距 NSNumber *margin = @20; // 这条vfl就是水平方向上,blueView左边距父控件最左边距20,redView距父控件最右边距20,blueView和redView中间距离20 NSString *vfl = @"H:|-margin-[blueView]-margin-[redView(==blueView)]-margin-|"; NSDictionary *views = NSDictionaryOfVariableBindings(blueView, redView); NSDictionary *mertrics = NSDictionaryOfVariableBindings(margin); NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:vfl options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom metrics:mertrics views:views]; [self.view addConstraints:constraints];