iOS开发UI系列之屏幕适配

来源:互联网 发布:win32 编程 编辑:程序博客网 时间:2024/06/07 07:59

一. 设备分辨率

设备

尺寸

像素

iPhone \ iPhone 3G \ iPhone 3GS

3.5 inch

320 x 480

320 x 480

iPhone 4 \ iPhone 4S

3.5 inch

640 x 960

320 x 480

iPhone 5 \ iPhone 5C \ iPhone 5S

4.0 inch

640 x 1136

320 x 568

iPhone6

4.7 inch

750 x 1334

375 x 667

iPhone6 plus

5.5 inch

1242 x 2208

414 x 736

iPad \ iPad2

9.7 inch

768 x 1024

768 x 1024

iPad 3(The new iPad) \ iPad4 \ iPad Air

9.7 inch

1536 x 2048

768 x 1024

iPad Mini

7.9 inch

768 x 1024

768 x 1024

iPad Mini 2(iPad Mini with retina display)

7.9 inch

1536 x 2048

768 x 1024

二. autoreszing的设置

1. autoreszing和autolayout相关冲突,当使用autureszing时需要在storyboard中把autolayout关闭


2. 在storyboard中设置autoreszing


3. 代码实现autoreszing

  1.    /*
  2.     UIViewAutoresizingNone                 没有设置任何线段
  3.     UIViewAutoresizingFlexibleLeftMargin   距离右边固定(距离左边可拉伸)
  4.     UIViewAutoresizingFlexibleRightMargin  距离左边固定(距离右边可拉伸)
  5.     UIViewAutoresizingFlexibleTopMargin    距离下边固定(距离上边可拉伸)
  6.     UIViewAutoresizingFlexibleBottomMargin 距离上边固定(距离下边可拉伸)
  7.     UIViewAutoresizingFlexibleWidth        宽度可拉伸
  8.     UIViewAutoresizingFlexibleHeight       高度可拉伸
  9.     */
  10. blueView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin;

三. autolayout(自动布局)的使用

1. autolayout在storyboard中设置


2. autolayout实现动画

1> 将需要改变的约束条件进行托线

eg:将UILabel的上边距距离View的约束条件托线

  1. /**
  2. *  约束条件托线
  3. */
  4. @property (weak, nonatomic) IBOutlet NSLayoutConstraint *labelTop;

2> 更改托线的属性的值

  1. self.labelTop.constant += 100;

3> 执行动画

  1. /**
  2. *  autolay动画实现
  3. */
  4. - (void)move
  5. {
  6.    // 1.更改约束条件
  7.    self.labelTop.constant += 100;
  8.    // 2.执行动画
  9.    [UIView animateWithDuration:2.0 animations:^{
  10.        [self.label layoutIfNeeded];
  11.    }];
  12. }

3. autolayout代码实现布局

1> 创建View

  • 将将某个控件添加到某个View前需要关闭autoresizing

    blueView.translatesAutoresizingMaskIntoConstraints = NO;

  1. UIView *blueView = [[UIView alloc] init];
  2. blueView.backgroundColor = [UIColor blueColor];
  3. blueView.translatesAutoresizingMaskIntoConstraints = NO; // 将autuoresizing关闭
  4. [self.view addSubview:blueView];
  5. UIView *redView = [[UIView alloc] init];
  6. redView.backgroundColor = [UIColor redColor];
  7. redView.translatesAutoresizingMaskIntoConstraints = NO;
  8. [self.view addSubview:redView];

2> 创建约束条件

  • 创建约束条件


    NSLayoutConstraint *blueLeftCon = [NSLayoutConstraint

                                     constraintWithItem:blueView

                                     attribute:NSLayoutAttributeLeft

                                     relatedBy:NSLayoutRelationEqual

                                     toItem:self.view

                                     attribute:NSLayoutAttributeLeft

                                     multiplier:1.0

                                     constant:30];

  • 将约束条件添加到对应的控件上


    [self.view addConstraint:blueLeftCon];

  1. // 2.设置约束条件
  2. /*
  3. attribute :
  4. NSLayoutAttributeLeft = 1,
  5. NSLayoutAttributeRight,
  6. NSLayoutAttributeTop,
  7. NSLayoutAttributeBottom,
  8. NSLayoutAttributeLeading,
  9. NSLayoutAttributeTrailing,
  10. NSLayoutAttributeWidth,
  11. NSLayoutAttributeHeight,
  12. NSLayoutAttributeCenterX,
  13. NSLayoutAttributeCenterY,
  14. NSLayoutAttributeBaseline,
  15. NSLayoutAttributeLastBaseline = NSLayoutAttributeBaseline,
  16. NSLayoutAttributeFirstBaseline NS_ENUM_AVAILABLE_IOS(8_0),
  17. NSLayoutAttributeLeftMargin NS_ENUM_AVAILABLE_IOS(8_0),
  18. NSLayoutAttributeRightMargin NS_ENUM_AVAILABLE_IOS(8_0),
  19. NSLayoutAttributeTopMargin NS_ENUM_AVAILABLE_IOS(8_0),
  20. NSLayoutAttributeBottomMargin NS_ENUM_AVAILABLE_IOS(8_0),
  21. NSLayoutAttributeLeadingMargin NS_ENUM_AVAILABLE_IOS(8_0),
  22. NSLayoutAttributeTrailingMargin NS_ENUM_AVAILABLE_IOS(8_0),
  23. NSLayoutAttributeCenterXWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
  24. NSLayoutAttributeCenterYWithinMargins NS_ENUM_AVAILABLE_IOS(8_0),
  25. NSLayoutAttributeNotAnAttribute = 0
  26. relateBy :
  27. NSLayoutRelationLessThanOrEqual = -1,
  28. NSLayoutRelationEqual = 0,
  29. NSLayoutRelationGreaterThanOrEqual = 1,
  30. */
  31. NSLayoutConstraint *blueLeftCon = [NSLayoutConstraint
  32.                                 constraintWithItem:blueView
  33.                                 attribute:NSLayoutAttributeLeft
  34.                                 relatedBy:NSLayoutRelationEqual
  35.                                 toItem:self.view
  36.                                 attribute:NSLayoutAttributeLeft
  37.                                 multiplier:1.0
  38.                                 constant:30];
  39. NSLayoutConstraint *blueBottomCon = [NSLayoutConstraint
  40.                                  constraintWithItem:blueView
  41.                                  attribute:NSLayoutAttributeBottom
  42.                                  relatedBy:NSLayoutRelationEqual
  43.                                  toItem:self.view
  44.                                  attribute:NSLayoutAttributeBottom
  45.                                  multiplier:1.0
  46.                                  constant:-30];
  47. NSLayoutConstraint *blueHeightCon = [NSLayoutConstraint
  48.                                     constraintWithItem:blueView
  49.                                     attribute:NSLayoutAttributeHeight
  50.                                     relatedBy:NSLayoutRelationEqual
  51.                                     toItem:nil
  52.                                     attribute:NSLayoutAttributeNotAnAttribute
  53.                                     multiplier:0.0
  54.                                     constant:50];
  55. // 添加约束条件
  56. [self.view addConstraint:blueLeftCon];
  57. [blueView addConstraint:blueHeightCon];
  58. [self.view addConstraint:blueBottomCon];
  59. NSLayoutConstraint *redRightCon = [NSLayoutConstraint
  60.                                   constraintWithItem:redView
  61.                                   attribute:NSLayoutAttributeRight
  62.                                   relatedBy:NSLayoutRelationEqual
  63.                                   toItem:self.view
  64.                                   attribute:NSLayoutAttributeRight
  65.                                   multiplier:1.0
  66.                                   constant:-30];
  67. NSLayoutConstraint *redHeightCon = [NSLayoutConstraint
  68.                                    constraintWithItem:redView
  69.                                    attribute:NSLayoutAttributeHeight
  70.                                    relatedBy:NSLayoutRelationEqual
  71.                                    toItem:blueView
  72.                                    attribute:NSLayoutAttributeHeight
  73.                                    multiplier:1.0
  74.                                    constant:0];
  75. NSLayoutConstraint *redWidthCon = [NSLayoutConstraint
  76.                                   constraintWithItem:redView
  77.                                   attribute:NSLayoutAttributeWidth
  78.                                   relatedBy:NSLayoutRelationEqual
  79.                                   toItem:blueView
  80.                                   attribute:NSLayoutAttributeWidth
  81.                                   multiplier:1.0
  82.                                   constant:0];
  83. NSLayoutConstraint *redMarginCon = [NSLayoutConstraint
  84.                                    constraintWithItem:redView
  85.                                    attribute:NSLayoutAttributeLeft
  86.                                    relatedBy:NSLayoutRelationEqual
  87.                                    toItem:blueView
  88.                                    attribute:NSLayoutAttributeRight
  89.                                    multiplier:1.0
  90.                                    constant:30];
  91. NSLayoutConstraint *redBottomCon = [NSLayoutConstraint
  92.                                    constraintWithItem:redView
  93.                                    attribute:NSLayoutAttributeBottom
  94.                                    relatedBy:NSLayoutRelationEqual
  95.                                    toItem:blueView
  96.                                    attribute:NSLayoutAttributeBottom
  97.                                    multiplier:1.0
  98.                                    constant:0];
  99. [self.view addConstraint:redRightCon];
  100. [self.view addConstraint:redHeightCon];
  101. [self.view addConstraint:redWidthCon];
  102. [self.view addConstraint:redMarginCon];
  103. [self.view addConstraint:redBottomCon];

4.VFL语言

pVFL全称是Visual Format Language,翻译过来是“可视化格式语言”

pVFL是苹果公司为了简化Autolayout的编码而推出的抽象语言


VFL示例
H:[cancelButton(72)]-12-[acceptButton(50)]
pcanelButton宽72,acceptButton宽50,它们之间间距12

H:[wideView(>=60@700)]
wideView宽度大于等于60point,该约束条件优先级为700(优先级最大值为1000,优先级越高的约束越先被满足)

V:[redBox][yellowBox(==redBox)]
竖直方向上,先有一个redBox,其下方紧接一个高度等于redBox高度的yellowBox

H:|-10-[Find]-[FindNext]-[FindField(>=20)]-|

水平方向上,Find距离父view左边缘默认间隔宽度,之后是FindNext距离Find间隔默认宽度;再之后是宽度不小于20的FindField,它和FindNext以及父view右边缘的间距都是默认宽度。(竖线“|” 表示superview的边缘)


VFL的使用
使用VFL来创建约束数组

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;

format :VFL语句
opts :约束类型
metrics :VFL语句中用到的具体数值
views :VFL语句中用到的控件

创建一个字典(内部包含VFL语句中用到的控件)的快捷宏定义

NSDictionaryOfVariableBindings(...)


5. Masonry实现自动布局

1> 导入Masonry框架,将核心代码文件夹Masonry导入到项目中,并把此文件夹下的info.plist文件删除


2> 创建约束条件

/*

  left/equalTo : 后面跟对象

  mas_left/mas_equalTo : 后面直接跟常量

 */

  1. [redView mas_makeConstraints:^(MASConstraintMaker *make) {
  2. make.right.equalTo(blueView.mas_right);
  3. make.top.equalTo(blueView.mas_bottom).offset(30);
  4. make.left.equalTo(self.view.mas_centerX);
  5. make.height.equalTo(blueView.mas_height);
  6. }];


0 0