【iOS】屏幕适配

屏幕适配

1、屏幕适配的发展过程:

代码计算frame -> autoreszing(父控件和子控件的关系) -> autolayout(任何控件都可以产生关系) -> sizeclass

没有屏幕适配,直接使用frame固定子控件的大小

屏幕大小一样,但是如果进行ipad开发,就需要考虑屏幕适配

屏幕大小不一样,需要考虑屏幕适配(使用autoresizing/autolayout实现)

autoresizing:ios7之前经常使用

autolayout:ios6开始出现,ios7之后大范围使用

sizeclass:ios8开始出现,解决横竖屏和iphone、ipad共同开发

2、autoreszing

  • 需要去除autolayout选项,因为这两个属性冲突。view的autoresizesSubviews属性为yes时(默认为yes),autoresizing才会生效

  • 从XCODE6开始,Storyboard&Xib默认是自动布局,因此我们需要手动调整,才能使用autoresizing

  • autoresizing的局限性

    它只能描述父子控件之间的布局关系,而不能描述子控件与子控件之间的布局关系

3、autolayout

要先禁止autoresizing功能,设置view的下面属性为NO

  view.translatesAutoresizingMaskIntoConstraints = NO;
> 添加约束之前,一定要保证相关控件都已经在各自的父控件上

> 不用再给view设置frame

使用autolayout不再需要设置子控件的frame

通过使用父子控件之间的约束 或者 子控件与子控件之间的约束进行frame的设置。

-好处:

你基本上可以不用考虑屏幕不同分辨率的问题,你终于可以不用在viewDidLoad方法里判断不同分辨率下,不同控件应该放在哪里,或者针对不同分辨率写不同的storyboard和xib
你可以抛弃那些根据不同文字来计算tableViewCell、UILabel高度的代码了,因为autolayout会帮你自动计算好
如果你的布局在横屏竖屏下变化不是特别大,你不用再为横着竖着写两套代码或者写两个storyboard/xib了

警告和错误

  1)、警告(黄色提示)
    * 控件的frame不匹配所添加的约束, 比如比如约束控件的宽度为100, 而控件现在的宽度是110
  2)、错误(红色提示)
    * 缺乏必要的约束, 比如只约束了宽度和高度, 没有约束具体的位置

    * 两个约束冲突, 比如1个约束控件的宽度为100, 1个约束控件的宽度为110

4、sizeclass

仅仅是对屏幕进行了分类, 真正排布UI元素还得使用autolayout

  • 不再有横竖屏的概念, 只有屏幕尺寸的概念
  • 不再有具体尺寸的概念, 只有抽象尺寸的概念
  • 把宽度和高度各分为3种情况
  1. Compact : 紧凑(小)
  2. Any : 任意
  3. Regular : 宽松(大)
  4. 符号代表
  • : Compact
  • : Any
  • : Regular

你可能感兴趣的:(【iOS】屏幕适配)