与iPhoneX的适配小记

这几天加班加点的把公司的app都完成了ios11和iphoneX的适配,总算是松了一口气,在这里做一个小记录

1.Xcode9下相册等访问权限问题

新的xcode9替换了相册的权限key,由原来的 NSPhotoLibraryUsageDescription替换成了NSPhotoLibraryAddUsageDescription,在用xcode9打包的时候不提换会导致crash

2.导航栏TitileView的宽度设置

导航栏在iOS10之前都是默认的64p,但是,到了iOS11就不单单是64p了,可以看一下系统的信息App,在iOS11添加了大标题,而且iOS11之前导航栏的title是添加在UINavigationItemView上面,而navigationBarButton则直接添加在navigationBar上面;如果设置了titleView,则titleView也是直接添加在navigationBar上面


968977-c6fe6299a9fedd8b.png

在iOS11之后,苹果添加了新的类来管理,navigationBar会添加在_UIButtonBarStackView上面,而_UIButtonBarStackView则添加在_UINavigationBarContentView上面;如果没有给titleView赋值,则titleView会直接添加在_UINavigationBarContentView上面,如果赋值给了titleView,则会新生成_UITAMICAdaptorView,把titleView添加在这个类上面,这个类会添加在_UINavigationBarContentView上面,所以之前的titleView的约束全部要重新写一个ios11的约束,至于自带的naviSearch和largeTitle因为时间有限没有去研究过,反正暂时还用不到

3.Safe Area

这个是最让我头疼的地方,因为iphoneX的缘故,底部的一片区域可能要用来做上拉返回Home的操作,为了防止布局到那里形成了手势冲突,在ios11里就加上了Safe Area的概念,这个概念刚开始看文档没看懂什么意思,后来自己试着写了个demo就理解了

2017-09-16-003.png
2017-09-16-004.png

黄色的部分就是苹果认为不会引发误操作的区域,所以在ios11里布局的layout有了一个新的约束参照就是Safe Area,那我们之前的布局因为会导致"探底"所以要做修改
如果是用xib完成的约束,只要在右边菜单栏选中Use Safe Area Layout Guides

2017-09-16-006.png

就会看到xib里有一个Safe Area的约束参照


2017-09-16-005.png

那么要做的就是把原先的bottom和top约束从相对于superView改成相对于Safe Area就可以了
如果是用的代码进行的约束,就要改一下约束的写法,下面是个小例子

private let greenView = UIView()
private func setupView() {
    greenView.translatesAutoresizingMaskIntoConstraints = false
    greenView.backgroundColor = .green
    view.addSubview(greenView)

    let margins = view.layoutMarginsGuide
    NSLayoutConstraint.activate([
      greenView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),
      greenView.bottomAnchor.constraint(equalTo: margins.bottomAnchor)
      ])
}

上面的代码是相对于原先的view进行约束,效果如下

2017-09-17-001.png
if #available(iOS 11, *) {
  let guide = view.safeAreaLayoutGuide
  NSLayoutConstraint.activate([
   greenView.leadingAnchor.constraintEqualToSystemSpacingBelow(guide.topAnchor, multiplier: 1.0),
   guide.bottomAnchor.constraintEqualToSystemSpacingBelow(greenView.bottomAnchor, multiplier: 1.0)
   ])

}

上面的代码则是选择用safeArea进行约束,效果如下

2017-09-17-002.png

那如果是像我一样之前用的masnory的,只要把block里面和top,bottom有关的删除掉,在下面模仿上面的样式加上相关约束就可以了
------------------更新----------------------
最新的masnory已可以支持safeArea


4.UITableView

UIScrollView相关的东西一起记在这里,都是相同的问题。
首先是automaticallyAdjustsScrollViewInsets这个属性被废弃了,之前如果设置automaticallyAdjustsScrollViewInsets=NO,就不会偏移64p,在ios11里要用新的属性来设置

if #available(iOS 11.0, *) {
      tableView.contentInsetAdjustmentBehavior = .never
}

然后ios11里默认启用Self-Sizing,tableView不会一次性计算所有的cell的高度了,只会计算当前屏幕能够显示的cell个数再加上几个,滑动时,tableView不停地得到新的cell,更新自己的contenSize,在滑到最后的时候,会得到正确的contenSize,所有estimated 高度默认值从iOS11之前的 0 改变为UITableViewAutomaticDimension,如果不想开启的话可以用下面的方法关闭

tableView.estimatedRowHeight = 0;
tableView.estimatedSectionHeaderHeight = 0;
tableView.estimatedSectionFooterHeight = 0;

5.iphoneX全屏显示

这个只要添加一个尺寸为1125 × 2436的启动图就可以了,在Contents.json里加上

{
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "2436h",
      "filename" : "IOS开机X.png",
      "minimum-system-version" : "11.0",
      "orientation" : "portrait",
      "scale" : "3x"
    }

6.IQKeyBoardManager不显示Done按钮的问题

目前这个问题还没有解决,看了下作者的github都快几个月没更新了,但是有没有什么更好的解决方案,现在暂时用的替代方案是点击空白处让键盘消失的方法,如果有什么更好的解决方案请留言告诉我,多谢
------------------更新----------------------
最新的IQKeyBoardManager已解决这个问题


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

推荐阅读更多精彩内容