前言

  • 什么是适配:

    • 适应、兼容各种不同的情况。
  • iOS 开发中,适配的常见种类:
    • 1)系统适配, 针对不同版本的操作系统进行适配。

    • 2)屏幕适配,针对不同大小的屏幕尺寸进行适配。
      • iPhone 的尺寸:3.5 inch、4.0 inch、4.7 inch、5.5 inch 。
      • iPad 的尺寸:7.9 inch、9.7 inch、12.9 inch 。
      • 屏幕方向:竖屏、横屏。

1、系统适配

  • Objective-C

        // 获取系统版本
        float systemVersion = [UIDevice currentDevice].systemVersion.floatValue;
    
        // 判断系统版本
        if ([UIDevice currentDevice].systemVersion.floatValue > 9.0) {
    
            // iOS 9 及其以上系统运行
    
        } else {
    
            // iOS 9 以下系统系统运行
        }
  • Swift

        // 获取系统版本
        let systemVersion:Float = NSString(string: UIDevice.current.systemVersion).floatValue
    
        // 判断系统版本
        if NSString(string: UIDevice.current.systemVersion).floatValue > 9.0 {
    
            // iOS 9 及其以上系统运行
    
        } else {
    
            // iOS 9 以下系统系统运行
        }
    
        // 判断系统版本
        if #available(iOS 9.0, *) {
    
            // iOS 9 及其以上系统运行
    
        } else {
    
            // iOS 9 以下系统系统运行
        }

2、屏幕适配

2.1 屏幕适配的发展历史

  • iPhone3GS \ iPhone4

    • 没有屏幕适配可言,全部用 frame、bounds、center 进行布局。
    • 很多这样的现象:坐标值、宽度高度值全部写死。

          UIButton *btn1 = [[UIButton alloc] init];
          btn1.frame = CGRectMake(0, iPhone3GS0, 320 - b, 480 - c);
  • iPad 出现、iPhone 横屏
    • 出现 Autoresizing 技术,让横竖屏适配相对简单,让子控件可以跟随父控件的行为自动发生相应的变化。

      • 前提:关闭 Autolayout 功能。
      • 局限性:只能解决子控件跟父控件的相对关系问题,不能解决兄弟控件的相对关系问题。
  • iOS 6.0(Xcode 4)开始
    • 出现了 Autolayout 技术。
    • 从 iOS 7.0 (Xcode 5) 开始,开始流行 Autolayout。

2.2 Autoresizing

2.2.1 Storyboard/Xib 中使用

  • 关闭 Autolayout 功能

    • 在 SB 的 Show the File Inspector 选项卡中取消对 Use Auto Layout 和 UseSize Classes 的勾选。

    • 关闭 Autolayout 后,SB 的 Show the Size Inspector 选项卡中将出现 Autoresizing 设置模块,如下图。

      • 此设置模块左侧方框内为设置选项,右侧矩形为设置效果预览。
      • 需要在子视图上设置。

      • 小方框四周的四个设置线,选中时,子视图与父视图的边距将保持不变。
        • 左和右、上和下,只能二选一,若同时选中,只有左和上起作用。
      • 小方框内部的两个线,选中时,子视图的宽或高将随父视图的变化而变化。

  • 设置示例:

    • 示例 1:

      • 设置子视图在父视图的右下角。

        • 将子视图放在父视图的右下角。
        • 设置子视图的 Autoresizing 右和下选项线。

      • 设置效果。
        • 子视图与父视图的右和下边距保持不变。
        • 子视图的宽和高保持不变。

    • 示例 2:

      • 设置子视图在父视图的下边,且宽度与父视图的宽度相等。

        • 将子视图放在父视图的下边。
        • 设置子视图的 Autoresizing 下和内部小方框的宽度选项线。

      • 设置效果。
        • 子视图与父视图的下和左右边距保持不变。
        • 子视图的高保持不变。
        • 子视图的宽随父视图的变化而变化。

2.2.2 纯代码中使用

  • Objective-C

    • 子视图设置选项:

          UIViewAutoresizingNone                 = 0,         // 不跟随
          UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,    // 左边距 随父视图变化,右边距不变
          UIViewAutoresizingFlexibleRightMargin  = 1 << 2,    // 右边距 随父视图变化,左边距不变
          UIViewAutoresizingFlexibleTopMargin    = 1 << 3,    // 上边距 随父视图变化,下边距不变
          UIViewAutoresizingFlexibleBottomMargin = 1 << 5     // 下边距 随父视图变化,上边距不变
      
          UIViewAutoresizingFlexibleWidth        = 1 << 1,    // 宽度 随父视图变化,左右边距不变
          UIViewAutoresizingFlexibleHeight       = 1 << 4,    // 高度 随父视图变化,上下边距不变
    • 设置示例:

      • 示例 1:

        • 设置子视图在父视图的右下角。

              UIView *blueView = [[UIView alloc] init];
              blueView.backgroundColor = [UIColor blueColor];
              CGFloat x = self.view.bounds.size.width - 100;
              CGFloat y = self.view.bounds.size.height - 100;
              blueView.frame = CGRectMake(x, y, 100, 100);
          
              // 设置父视图是否允许子视图跟随变化
              /*
                  default is YES
              */
              self.view.autoresizesSubviews = YES;
          
              // 设置子视图的跟随效果
              /*
                  子视图的左边距和上边距随父视图的变化而变化,即右边距和下边距保持不变
              */
              blueView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
                                        | UIViewAutoresizingFlexibleTopMargin;
          
              [self.view addSubview:blueView];
        • 设置效果。
          • 子视图与父视图的右和下边距保持不变。
          • 子视图的宽和高保持不变。

      • 示例 2:

        • 设置子视图在父视图的下边,且宽度与父视图的宽度相等。

              UIView *blueView = [[UIView alloc] init];
              blueView.backgroundColor = [UIColor blueColor];
              CGFloat w = self.view.bounds.size.width;
              CGFloat y = self.view.bounds.size.height - 100;
              blueView.frame = CGRectMake(0, y, w, 100);
          
              // 设置父视图是否允许子视图跟随变化
              /*
                  default is YES
              */
              self.view.autoresizesSubviews = YES;
          
              // 设置子视图的跟随效果
              /*
                  子视图的宽度和上边距随父视图的变化而变化,即左右边距和下边距保持不变
              */
              blueView.autoresizingMask = UIViewAutoresizingFlexibleWidth
                                        | UIViewAutoresizingFlexibleTopMargin;
          
              [self.view addSubview:blueView];
        • 设置效果。
          • 子视图与父视图的下和左右边距保持不变。
          • 子视图的高保持不变。
          • 子视图的宽随父视图的变化而变化。

2.3 Autolayout

3、App 图标和启动图片

3.1 App 图标设置

  • App 图标尺寸

  • App 图标设置

    • 默认从 AppIcon 中加载 App 图标。

    • 20pt 表示 20 个点,即 2x 图片的像素为 (20 * 2) * (20 * 2) 像素,3x 图片的像素为 (20 * 3) * (20 * 3) 像素。

3.2 启动图片设置

  • 启动图片尺寸

  • 启动图片设置

    • Launch Images Sources :从指定的位置加载启动图片。
    • Launch Screen Files :默认,从指定的文件(xib 或 sb 文件)加载启动屏幕(启动图片)。

    • 修改为从指定的位置加载启动图片,清除 Launch Screen Files 项内容,点击 Use Asset Catalog... ,按照默认设置,点击 Migrate 。

    • 在 Assets.xcassets 中将自动添加 LaunchImage(或者 Brand Assets)。

    • Retina HD 5.5 为 5.5 寸屏的设备,Retina HD 4.7 为 4.7 寸屏的设备,Retina HD 4 为 4.0 寸屏的设备;Portrait 为竖屏,Landscape 为横屏。

4、iOS 设备各种尺寸

4.1 iOS 设备尺寸

4.2 Resolutions 分辨率

4.3 Displays 显示

4.4 Dimensions App 图标尺寸

4.5 Common Design Elements 常见控件尺寸

4.6 Icons 控件图标尺寸

4.7 Default Font Sizes iPhone 5/5C/5S/6 控件字体大小

4.8 Default Font Sizes iPhone 6 Plus 控件字体大小

4.9 Size Classes For Adaptive Layout

iOS - iOS 适配的更多相关文章

  1. iOS屏幕适配

    ## iOS屏幕适配 ### iOS屏幕适配发展史 1> iPhone4以前(没有iPad) * 不需要屏幕适配 2> iPad.iPhone5等设备出现 * 需要做横竖屏适配 * aut ...

  2. iOS 9 适配需要注意的问题

    iOS 9 适配需要注意的问题 1`网络适配_改用更安全的HTTPS iOS9把所有的http请求都改为https了:iOS9系统发送的网络请求将统一使用TLS 1.2 SSL.采用TLS 1.2 协 ...

  3. 【转】iOS屏幕适配

    一.iOS屏幕适配发展历程 设备 适配技术 4及以前(iPad未出) 直接用代码计算 有了iPad autoResizing 有不同屏幕的iPhone后 autoLayout 有更多不同屏幕的iPho ...

  4. iOS:界面适配--iPhone不同机型适配 6/6plus

    iOS:界面适配--iPhone不同机型适配 6/6plus        机型变化 坐标:表示屏幕物理尺寸大小,坐标变大了,表示机器屏幕尺寸变大了: 像素:表示屏幕图片的大小,跟坐标之间有个对应关系 ...

  5. [IOS]IOS UI指南

    [IOS]IOS UI指南 众所周知,IOS的界面设计,越来越流行,可以说都形成了一个标准,搜集了一些资料,供自己以后学习使用! iOS Human Interface Guidelines (中文翻 ...

  6. iOS开发 适配iOS10

    2016年9月7日,苹果发布iOS 10.2016年9月14日,全新的操作系统iOS 10将正式上线. 作为开发者,如何适配iOS10呢? 1.Notification(通知) 自从Notificat ...

  7. 【转载】iOS屏幕适配设计

    移动app开发中多种设备尺寸适配问题,过去只属于Android阵营的头疼事儿,只是很多设计师选择性地忽视android适配问题,只出一套iOS平台设计稿.随着苹果发布两种新尺寸的大屏iPhone 6, ...

  8. iOS 屏幕适配:autoResizing autoLayout和sizeClass

    1. autoResizing autoresizing是苹果早期的ui布局适配的解决办法,iOS6之前完全可以胜任了,因为苹果手机只有3.5寸的屏幕,在加上手机app很少支持横屏,所以iOS开发者基 ...

  9. IOS - 屏幕适配

    原文:Beginning Auto Layout Tutorial in iOS 7: Part 1 感谢翻译小组成员@answer-huang(博客)热心翻译.如果您有不错的原创或译文,欢迎提交给我 ...

  10. 整理 iOS 9 适配中出现的坑(图文)(转)

    作者:董铂然 本文主要是说一些iOS9适配中出现的坑,如果只是要单纯的了解iOS9新特性可以看瞄神的开发者所需要知道的 iOS 9 SDK 新特性.9月17日凌晨,苹果给用户推送了iOS9正式版,随着 ...

随机推荐

  1. excel 日期/数字格式不生效需要但双击才会生效的解决办法

    原因: Excel2007设置过单元格格式后,并不能立即生效必须挨个双击单元格,才能生效.数据行很多.效率太低. 原因:主要是一些从网上拷贝过来的日期或数字excel默认为文本格式或特殊-中文数字格式 ...

  2. github fork后的pull和保持同步

    前言 对github上的某个项目贡献自己的修改,但自己可能并没有那个仓库的权限,那要如何操作呢?git的机制和svn还是有些区别的,本文做些记录. 思路1 clone项目到本地,有修改之后,直接提交到 ...

  3. PHP大数(浮点数)取余

    一般我们进行取余运算第一个想到的就是用百分号%,但当除数是个很大的数值,超出了int范围时,这样取余就不准确了. php大数(浮点数)取余函数 /** * php大数取余 * * @param int ...

  4. UVALive 3902 网络

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. 高性能javascript(记录三)

    DOM(文档对象模型)是一个独立的语言,用于操作XML和HTML文档的程序接口(API).在游览器中,主要用来与HTML文档打交道,同样也用在Web程序中获取XML文档,并使用DOM API用来访问文 ...

  6. Smarty模本引擎

    封装一个自定义Smarty引擎 Smart模板注释 基本语法:{* 注释内容 *} Smarty模板中的变量 简单变量 四种标量类型:整型.浮点型.布尔型和字符串型! 数组变量 可以给模板分配一个数组 ...

  7. uva12716 gcd

    题意:给出N,1<=b<=a<=N,求满足gcd(a,b)=a xor b的pair (a,b)的个数 有个重要的结论:若gcd(a,b)=a xor b=c,那么b=a-c 如果一 ...

  8. Java-集合类汇总

    结构图: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakH ...

  9. 轻松架设时时监控工具Cacti

    Cacti是一套基于PHP,MySQL,SNMP及 RRDTool开发的网络流量监测图形分析工具.通过snmpget来获取数据,使用 RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂 ...

  10. jquery循环延迟加载,用于在图片加载完成后再加载js

    <html> <head> <script type="text/javascript" src="http://lib.sinaapp.c ...