iOS11&iPhoneX适配笔记

一、iPhone设备变迁

15款iphone、5种不同比例的屏幕

3GS、3G: 320*480     @1x 320*480像素分辨率            3.5英寸
4S、4、       320*480     @2x 640*960像素分辨率            3.5英寸
SE、5S、5C、5: 320*568     @2x     640*1136像素分辨率           4.0英寸
8、7、6S、6:   375*667     @2x 750*1334像素分辨率           4.7英寸

8P、7P、6SP、6P:   414*736     @3x     1080*1920(1.15)像素分辨率    5.5英寸
8X:     375*812     @3x     1125*2436像素分辨率      5.8英寸

预装系统;https://baike.baidu.com/item/iPhone/238239

1       ios1    07
3g/2g       ios2    08
3gs     ios3    09  
4       ios4    10


4s      ios5    11
5       ios6    12
5s,5c       ios7    13
6,6p        ios8    14
6s,6sp,se   ios9    15
7,7p        ios10   16
8,8p,8x     ios11   17  

支持的模拟器,4s,5,5c,5s,6,6p 最低版本都是从iOS 8.0开始;
6s,6sp, se 最低从iOS 9.0开始;
7,7p 最低从iOS 10.0开始;
8,8p,8x最低从iOS 11.0开始。

375*667         SafeArea     
375*812         SafeArea

带标签栏 : 812- 44-49-34=685
带导航栏: 812-44-44-49-34=641

44导航栏,
49标签栏,

34底部空白,
44(32+12)顶部空白

二、编译器xcode 9 带来的变化

1,无线调试

2,代码块提示。 鼠标移到for上按下command键
对class, func, if, for都有效。

3,command+control再点击,快速跳转到定义。

4、command+点击,弹出菜单
跳转到定义
显示了快速帮助
scope
重命名

5、New Color Set
Assets.xcassets加入有名字的颜色。
使用IB构建UI可以享受到这一个福利

6、  Debug View Hierarchy
xcode8只能看到controller的view
xcode9可以看到controller

7、 Xcode 9 上面区分了 Group 和 Folder,所以也提供了 Create Group without Folder。
并且 Group 的图标是有个角的, 原来的关联的虚拟的group,如果没有对应绝对路径的文件夹,则会显示红色的。

三、iOS11系统 带来的变化

1, Navigation title 放大了导航栏的标题字体
// 设置为true:self.navigationItem.largeTitleDisplayMode设置,显示大标题模式,也可以显示小标题模式。
// 设置为false:self.navigationItem.largeTitleDisplayMode设置大标题不起作用。

self.navigationController.navigationBar.prefersLargeTitles =true;
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;

提供了一套类似Files App的界面。可以获取用户设备上的,或者云端的文件。

FileProvider
FileProviderUI

3.不再支持32位APP: 意思是说32位Only的APP在iOS 11上跑不起来。这在iOS 10上是可以的。
64位系统,跑32位软件: iOS11不可以,iOS10和以下可以。
32位系统,跑64位软件:不能。

真机架构.a
armv7(32位): 3gs,4,4s
armv7s(32位): 5,5c

arm64(64位): 5s和以上

模拟器架构.a
i386(32位):4,4s,5,5c
x86_64(64位):5s和以上

4、增加DeviceCheckAPI。追踪用户。
你在设备上用 DeviceCheck API 生成一个 token,然后将这个 token 发给自己的服务器,再由自己的服务器与 Apple 的 API 进行通讯,来更新或者查询该设备的值。这两个 bit 的数据用来追踪用户比如是否已经领取奖励这类信息。

5、PDfkit显示和操作PDF文件。

6、
IdentityLookup - 可以自己开发一个 app extension 来拦截系统 SMS 和 MMS 的信息。系统的信息 app 在接到未知的人的短信时,会询问所有开启的过滤扩展,如果扩展表示该消息应当被拦截,那么这则信息将不会传递给你。扩展有机会访问到事先指定的 server 来进行判断 (所以说你可以光明正大地获取用户短信内容了,不过当然考虑到隐私,这些访问都是匿名加密的,Apple 也禁止这类扩展在 container 里进行写入)。

只能读信息,不能篡改信息。

7、iPhone7/7Plus上提供CoreNFC支持。
上提供基础的近场通讯读取功能。看起来很 promising,只要你有合适的 NFC 标签,手机就可以进行读取。但是考虑到无法后台常驻,实用性就打了折扣。

8、AutoFill
从 iCloud Keychain 中获取密码,然后自动填充的功能现在开放给第三方开发者了。UITextInputTraits 的 textContentType 中添加了 username 和 password,对适合的 text view 或者 text field 的 content type 进行配置,并填写 Info.plist 的相关内容,就可以在要求输入用户名密码时获取键盘上方的自动填充,帮助用户快速登录。

9、增加系统条件@available

    if (@available(iOS 10.3, *)) {
  10.3的API
    } else {
10.3系统一下的API
    }


if (@available(iOS 11.0, *)) {


} else {

}

10、增加了AutoLayout增加了约束条件。

image.png
image.png

四、具体遇到的适配问题

1、iOS11中AppIcon设置无效的问题

https://github.com/mythkiven/developTips
据说是Cocopods的问题。 如果不用Cocoapods确实可以。增加1024图片即可。
直接在InfoPlist中配也可以有效

image.png
<key>CFBundleIcons</key>
    <dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>UIPrerenderedIcon</key>
            <false/>
            <key>CFBundleIconFiles</key>
            <array>
                <string>1024x1024.png</string>
                <string>Icon-60@2x.png</string>
                <string>Icon-60@3x.png</string>
                <string>Icon-Notification@2x.png</string>
                <string>Icon-Notification@3x.png</string>
                <string>Icon-Small-40@2x.png</string>
                <string>Icon-Small-40@3x.png</string>
                <string>Icon-Small@2x.png</string>
                <string>Icon-Small@3x.png</string>
            </array>
        </dict>
        <key>CFBundleAlternateIcons</key>
        <dict>
            <key>1</key>
            <dict>
                <key>UIPrerenderedIcon</key>
                <false/>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>icon22.png</string>
                    <string>icon22@2x.png</string>
                    <string>icon22@3x.png</string>
                </array>
            </dict>
        </dict>
    </dict>

2, 导航条按钮问题

UIBarButtonSystemItemFixedSpace不管用了? 还是默认的左边缘距离值修改了。

3、导航条大标题模式

大标题模式

(0 20; 375 96) UINavigationBar
(0 -20; 375 116) _UIBarBackground
(0 44; 375 52) _UINavigationBarLargeTitleView
(0 0; 375 44) _UINavigationBarContentView

小标题模式

(0 20; 375 44) UINavigationBar
(0 -20; 375 64) _UIBarBackground
(0 0; 375 44) _UINavigationBarContentView

// 设置为true:self.navigationItem.largeTitleDisplayMode设置,显示大标题模式,也可以显示小标题模式。
// 设置为false:self.navigationItem.largeTitleDisplayMode设置大标题不起作用。

    self.navigationController.navigationBar.prefersLargeTitles =true;
    //
    self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeNever;

总结:
8x: 导航栏88+搜索框(如果有)52
8:导航栏64+搜索框(如果有)52

大标题:
8x: 导航栏140(大标题52)+搜索框(如果有)52
8:导航栏116(大标题52)+搜索框(如果有)52

5、 设置导航栏搜索控制器 searchController

UILayoutContainerView
    UINaivgationTransitionView
        UIViewContollerWrapperView
    _UINavigationControllerPaletteClippingView//搜索框
    UINavigationBar//导航条


大标题模式:
(0 0; 375 667);     _UINavigationControllerPaletteClippingView
 (0 116; 375 52)        _UINavigationControllerManagedSearchPalette
(0 0; 375 52)               _UIBarBackground
(0 0; 375 52);              UISearchBar

小标题模式:
(0 0; 375 667);     _UINavigationControllerPaletteClippingView
(0 64; 375 52)          _UINavigationControllerManagedSearchPalette
(0 0; 375 52)               _UIBarBackground
(0 0; 375 52);              UISearchBar

激活状态下:
搜索框:
(0 0; 375 667);     _UINavigationControllerPaletteClippingView
 (0 20; 375 50)         _UINavigationControllerManagedSearchPalette
(0 -20; 375 70);            _UIBarBackground
 (0 0; 375 50);             UISearchBar

导航条:

(0 -96; 375 96);    UINavigationBar
 (0 -20; 375 116)       _UIBarBackground
(0 44; 375 52)          _UINavigationBarLargeTitleView
 (0 0; 375 44)          _UINavigationBarContentView

总结:
激活时:搜索框116高度。移到顶部。导航条移到父view的外面。

4、scrollView顶部20像素空白问题

这篇文章总结的是最好的。https://mp.weixin.qq.com/s/W1_0VrchCO50owhJNmJnuQ

//UIScrollView 
@property(nonatomic) UIScrollViewContentInsetAdjustmentBehavior contentInsetAdjustmentBehavior API_AVAILABLE(ios(11.0),tvos(11.0));
@property(nonatomic, readonly) UIEdgeInsets adjustedContentInset API_AVAILABLE(ios(11.0),tvos(11.0));


//UITableView
@property (nonatomic) BOOL insetsContentViewsToSafeArea API_AVAILABLE(ios(11.0), tvos(11.0)); // default value is YES


//UIViewController
@property(nonatomic) UIEdgeInsets additionalSafeAreaInsets API_AVAILABLE(ios(11.0), tvos(11.0));
@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets API_DEPRECATED_WITH_REPLACEMENT("Use UIScrollView's contentInsetAdjustmentBehavior instead", ios(7.0,11.0),tvos(7.0,11.0)); // Defaults to YES


//UIView
@property (nonatomic,readonly) UIEdgeInsets safeAreaInsets API_AVAILABLE(ios(11.0),tvos(11.0));
- (void)safeAreaInsetsDidChange API_AVAILABLE(ios(11.0),tvos(11.0));


UIViewContoller的automaticallyAdjustsScrollViewInsets过期,
改用UIScorllView的属性 contentInsetAdjustmentBehavior来控制。

修改contentInsetAdjustmentBehavior, 对应为变化adjustedContentInset值。

UIScrollView/UITableView/UICollectionView

1)、contentInset不会占用contentSize

2)、adjustedContentInset会导致ScrollView的contentOffset做对应的值偏移

3)、inset不会改变ContentView的Frame的Orgin

真正的边距由adjustedContentInset值决定

adjustedContentInset等于SafeAreaInsets和ContentInset两个合并加成,形成真正的边距。

5、 SafeArea布局。 9.0以上才可以用。
Safe Area Layout Guide before iOS 9.0
Safe Area Layout Guides

// UIViewController
@property(nonatomic,readonly,strong) id<UILayoutSupport> topLayoutGuide API_DEPRECATED_WITH_REPLACEMENT("-[UIView safeAreaLayoutGuide]", ios(7.0,11.0), tvos(7.0,11.0));
@property(nonatomic,readonly,strong) id<UILayoutSupport> bottomLayoutGuide API_DEPRECATED_WITH_REPLACEMENT("-[UIView safeAreaLayoutGuide]", ios(7.0,11.0), tvos(7.0,11.0));


//UIView
@property(nonatomic,readonly,strong) UILayoutGuide *safeAreaLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));
@property(nonatomic,readonly,strong) UILayoutGuide *safeAreaLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));

@property(readonly,strong) UILayoutGuide *layoutMarginsGuide NS_AVAILABLE_IOS(9_0);
@property (nonatomic, readonly, strong) UILayoutGuide *readableContentGuide  NS_AVAILABLE_IOS(9_0);

@property (nonatomic) BOOL insetsLayoutMarginsFromSafeArea API_AVAILABLE(ios(11.0),tvos(11.0));  // Default: YES

6、
UITableView
UITableViewDataSourcePrefetching---prefetchRowsAtIndexPaths
UITableViewDragDelegate、UITableViewDropDelegate

UIScrollView:
XIB的ContentInset对iOS11有效。

7、8x屏幕并没有全屏的问题
在Contents.json增加
{
"extent" : "full-screen",
"idiom" : "iphone",
"subtype" : "2436h",
"filename" : "Launchlmage-375-Portrait-812h@3x.png",
"minimum-system-version" : "11.0",
"orientation" : "portrait",
"scale" : "3x"
}

增加一张1125*2436的启动图片。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,826评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,968评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,234评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,562评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,611评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,482评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,271评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,166评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,608评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,814评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,926评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,644评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,249评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,866评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,991评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,063评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,871评论 2 354

推荐阅读更多精彩内容