对于适配一些简单看法

在一开始编写项目时,并没有想象项目在各个设备上的显示效果,只是略微一个百分比的设置,以简单的适配设备。

在项目开始的时候,考虑到各种设备的不同显示效果,从而在适配上又重新做了一个调整。主要是采用两种方式来适配:

 

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发生冲突,而让适配失效。

  

posted on 2015-11-06 19:54  婷空万里TD  阅读(158)  评论(0编辑  收藏  举报