对于适配一些简单看法
在一开始编写项目时,并没有想象项目在各个设备上的显示效果,只是略微一个百分比的设置,以简单的适配设备。
在项目开始的时候,考虑到各种设备的不同显示效果,从而在适配上又重新做了一个调整。主要是采用两种方式来适配:
1.NSLayoutConstraint
这是苹果自带的一种适配技术,我们可以简单的让控件适配。比如说一个控件距离左边10,距离右边10,距离上面10,距离下面10,这样就能让控件在不同尺寸的设备上显示出比较好的效果:
self.container.translatesAutoresizingMaskIntoConstraints = NO;
NSLayoutConstraint *containerLeftConstraint = [NSLayoutConstraint constraintWithItem:self.container attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeLeading multiplier:1.0 constant:10];
NSLayoutConstraint *containerTopConstraint = [NSLayoutConstraint constraintWithItem:self.container attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTop multiplier:1.0 constant:150];
NSLayoutConstraint *containerBottomConstraint = [NSLayoutConstraint constraintWithItem:self.container attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeBottom multiplier:1.0 constant:-150];
NSLayoutConstraint *containerRightConstraint = [NSLayoutConstraint constraintWithItem:self.container attribute:NSLayoutAttributeTrailing relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeTrailing multiplier:1.0 constant:-10];
//iOS 6.0或者7.0调用addConstraints
// [self.view addConstraints:@[leftConstraint, rightConstraint, topConstraint, heightConstraint]];
//iOS 8.0以后设置active属性值
containerLeftConstraint.active = YES;
containerRightConstraint.active = YES;
containerTopConstraint.active = YES;
containerBottomConstraint.active = YES;
NSLayoutAttributeLeading是距离左边,NSLayoutAttributeTrailing是距离右边,NSLayoutAttributeTop是距离上面,NSLayoutAttributeBottom是距离下面。
但是这样的适配在获取frame时是失败的,因为它是在获取设备宽高之后才给其设置frame,也就是动态的给与frame的,在代码的ViewDidLayoutSubViews中可以获取到它的frame。
2.直接利用frame进行适配
利用frame进行适配时,是以百分比为标准的,比如说10个控件分两排,1排显示5个,就可以得到它的宽度以及X值(WIDTH / 5)* i
最后在使用NSLayoutConstraint进行适配时,首先要将控件的translatesAutoresizingMaskIntoConstraints = NO,否则AutoresizingMask与NSLayoutConstraint发生冲突,而让适配失效。