iOS - iOS 适配

前言

  • 什么是适配:

    • 适应、兼容各种不同的情况。
  • 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

时间: 2024-10-26 03:25:42

iOS - iOS 适配的相关文章

ios-求助 iOS https适配 我用的AFNetworking ssl验证的那个函数报错..

问题描述 求助 iOS https适配 我用的AFNetworking ssl验证的那个函数报错.. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; //1.管理器[manager setRequestSerializer:[AFHTTPRequestSerializer serializer]];manager.responseSerializer.acceptableContentTypes = [NSSet s

iOS屏幕适配开发实用技巧_IOS

一.旋转处理 第一步:注册通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeFrames:) name:UIDeviceOrientationDidChangeNotification object:nil]; 第二步:处理接收事件 -(void)changeFrames:(NSNotification *)notification{ NSLog(@"change notifica

iOS 9 适配,我咋还没遇到这么多坑呢呀

iOS 9 适配,我咋还没遇到这么多坑呢呀 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. iOS 9 适配,我咋还没遇到这么多坑呢呀 (后面仨字儿,谁会多?!...真不会呀,那你想想小沈阳,你

CNNVD有关Cisco IOS&amp;IOS XE Software CMP 安全漏洞情况的通报

本文讲的是CNNVD有关Cisco IOS&IOS XE Software CMP 安全漏洞情况的通报,路由交换市场份额领先的思科(Cisco)公司于3月17日发布了IOS和IOS XE Software安全漏洞(CNNVD-201703-840),引起了广泛关注.该漏洞允许未授权的攻击者执行任意代码.提升权限.重启设备等.国家信息安全漏洞库(CNNVD)对此进行了跟踪分析,具体情况如下: 一. 漏洞简介 Cisco IOS/IOS XE Software是美国思科(Cisco)公司为其网络设备

思科 IOS&amp;IOS XE Software CMP远程代码执行漏洞通报

2017年3月17日美国时间下午4点,Cisco官方网站发布Cisco IOS&IOS XE Software 集群管理协议(Cluster Management Protocol)存在远程代码执行漏洞.该漏洞目前为0day漏洞,危害等级高.该漏洞允许未授权访问,远程攻击者可以重启设备和远程执行代码提升权限. Cisco IOS是Cisco的网际操作系统:是一个为网际互连优化的复杂的操作系统:也是一个与硬件分离的软件体系结构,随网络技术的不断发展,可动态地升级以适应不断变化的技术(软件). 根据

iOS屏幕适配-iOS笔记

学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeClass的基本用法 一.屏幕适配的发展史 随着iOS屏幕尺寸越来越多样化,屏幕适配也就越来越重要了. iphone1 - iphone3gs时代,window的size固定为(320,480).我们只需要简单计算一下相对位置就好了,不需要做屏幕适配. iphone4 - iphone4s时代,苹果推出了

ios ui 适配 分辨率-IOS开发下,要怎么调试界面?需要买齐设备来调试吗?

问题描述 IOS开发下,要怎么调试界面?需要买齐设备来调试吗? IOS开发,不知道怎么调试UI布局,每个分辨率都不一样,大小也不一,怎么才能知道最佳分辨率和布局? 一定需要真机调试吗? 开发PAD和PHONE两个版本,需要用到 两套素材 对吗? 解决方案 根据UIScreen这个属性可以获得当前模拟器物理界面大小,在Xcode5 中,3.5是4 4.0 就是5 的屏幕,在xcod6中,模拟器会直接标识手机型号,更好匹配. 对于素材,iPad切图一般是两套,一倍和二倍,而iPhone的切图,因为p

ios ui 适配 ...-关于iOS 开发的runtime ,它有什么作用?你们一般什么时候用到这个?

问题描述 关于iOS 开发的runtime ,它有什么作用?你们一般什么时候用到这个? 关于iOS 开发的runtime ,它有什么作用?你们一般什么时候用到这个?简单举例说明下 解决方案 动态获类的属性.成员变量.方法实现.为类添加属性.方法等,一般应用于归档解档.为类目添加属性等,像一些json转model的第三方类库如:Mantle.JsonModel.MJExtension.YYModel等都运用了runtime,你可以研究研究.

iOS 9适配系列教程:后台定位

[iOS9在定位的问题上,有一个坏消息一个好消息]坏消息:如果不适配iOS9,就不能偷偷在后台定位(不带蓝条,见图)!好消息:将允许出现这种场景:同一App中的多个location manager:一些只能在前台定位,另一些可在后台定位,并可随时开启或者关闭特定location manager的后台定位. 如果没有请求后台定位的权限,也是可以在后台定位的,不过会带蓝条: 如何偷偷在后台定位:请求后台定位权限: // 1. 实例化定位管理器  _locationManager = [[CLLoca