與iPhoneX的適配小記

這幾天加班加點(diǎn)的把公司的app都完成了ios11和iphoneX的適配,總算是松了一口氣,在這里做一個小記錄

1.Xcode9下相冊等訪問權(quán)限問題

新的xcode9替換了相冊的權(quán)限key,由原來的 NSPhotoLibraryUsageDescription替換成了NSPhotoLibraryAddUsageDescription,在用xcode9打包的時候不提換會導(dǎo)致crash

2.導(dǎo)航欄TitileView的寬度設(shè)置

導(dǎo)航欄在iOS10之前都是默認(rèn)的64p,但是,到了iOS11就不單單是64p了,可以看一下系統(tǒng)的信息App,在iOS11添加了大標(biāo)題,而且iOS11之前導(dǎo)航欄的title是添加在UINavigationItemView上面,而navigationBarButton則直接添加在navigationBar上面;如果設(shè)置了titleView,則titleView也是直接添加在navigationBar上面


968977-c6fe6299a9fedd8b.png

在iOS11之后,蘋果添加了新的類來管理,navigationBar會添加在_UIButtonBarStackView上面,而_UIButtonBarStackView則添加在_UINavigationBarContentView上面;如果沒有給titleView賦值,則titleView會直接添加在_UINavigationBarContentView上面,如果賦值給了titleView,則會新生成_UITAMICAdaptorView,把titleView添加在這個類上面,這個類會添加在_UINavigationBarContentView上面,所以之前的titleView的約束全部要重新寫一個ios11的約束,至于自帶的naviSearch和largeTitle因?yàn)闀r間有限沒有去研究過,反正暫時還用不到

3.Safe Area

這個是最讓我頭疼的地方,因?yàn)閕phoneX的緣故,底部的一片區(qū)域可能要用來做上拉返回Home的操作,為了防止布局到那里形成了手勢沖突,在ios11里就加上了Safe Area的概念,這個概念剛開始看文檔沒看懂什么意思,后來自己試著寫了個demo就理解了

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

黃色的部分就是蘋果認(rèn)為不會引發(fā)誤操作的區(qū)域,所以在ios11里布局的layout有了一個新的約束參照就是Safe Area,那我們之前的布局因?yàn)闀?dǎo)致"探底"所以要做修改
如果是用xib完成的約束,只要在右邊菜單欄選中Use Safe Area Layout Guides

2017-09-16-006.png

就會看到xib里有一個Safe Area的約束參照


2017-09-16-005.png

那么要做的就是把原先的bottom和top約束從相對于superView改成相對于Safe Area就可以了
如果是用的代碼進(jìn)行的約束,就要改一下約束的寫法,下面是個小例子

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進(jìn)行約束,效果如下

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進(jìn)行約束,效果如下

2017-09-17-002.png

那如果是像我一樣之前用的masnory的,只要把block里面和top,bottom有關(guān)的刪除掉,在下面模仿上面的樣式加上相關(guān)約束就可以了
------------------更新----------------------
最新的masnory已可以支持safeArea


4.UITableView

UIScrollView相關(guān)的東西一起記在這里,都是相同的問題。
首先是automaticallyAdjustsScrollViewInsets這個屬性被廢棄了,之前如果設(shè)置automaticallyAdjustsScrollViewInsets=NO,就不會偏移64p,在ios11里要用新的屬性來設(shè)置

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

然后ios11里默認(rèn)啟用Self-Sizing,tableView不會一次性計(jì)算所有的cell的高度了,只會計(jì)算當(dāng)前屏幕能夠顯示的cell個數(shù)再加上幾個,滑動時,tableView不停地得到新的cell,更新自己的contenSize,在滑到最后的時候,會得到正確的contenSize,所有estimated 高度默認(rèn)值從iOS11之前的 0 改變?yōu)閁ITableViewAutomaticDimension,如果不想開啟的話可以用下面的方法關(guān)閉

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

5.iphoneX全屏顯示

這個只要添加一個尺寸為1125?×?2436的啟動圖就可以了,在Contents.json里加上

{
      "extent" : "full-screen",
      "idiom" : "iphone",
      "subtype" : "2436h",
      "filename" : "IOS開機(jī)X.png",
      "minimum-system-version" : "11.0",
      "orientation" : "portrait",
      "scale" : "3x"
    }

6.IQKeyBoardManager不顯示Done按鈕的問題

目前這個問題還沒有解決,看了下作者的github都快幾個月沒更新了,但是有沒有什么更好的解決方案,現(xiàn)在暫時用的替代方案是點(diǎn)擊空白處讓鍵盤消失的方法,如果有什么更好的解決方案請留言告訴我,多謝
------------------更新----------------------
最新的IQKeyBoardManager已解決這個問題


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 蘋果WWDC開發(fā)者大會上,終于發(fā)布了大家期待已久的iOS 11,有些新特性功能確實(shí)出人意料。不過大的方面蘋果...
    Mr_Say_Yes閱讀 3,474評論 6 15
  • 一、前言 iOS11發(fā)布也有一段時間了,每次版本升級,相關(guān)的適配工作當(dāng)然是下個版本的核心工作之一。而且這次iOS1...
    景銘巴巴閱讀 11,150評論 8 105
  • 隨著Xcode GM版本發(fā)布,適配iOS 11也就提上了日程,總的來說整個適配過程不是很麻煩。建議觀看今年WWDC...
    iOS駱駝閱讀 2,825評論 1 6
  • 公司的App是居于iOS8以上的,頁面顯示在iOS8~iOS10都沒有問題,但是,iOS11beta版顯示出現(xiàn)各種...
    一劍孤城閱讀 129,829評論 107 224
  • 今晚開會,回來的晚八點(diǎn)多了。也沒吃飯,就去田徑場跑了幾圈,跑累了用美團(tuán)點(diǎn)了個外賣,然后繼續(xù)散步。 還在回來的路上,...
    嵐風(fēng)的葉子閱讀 304評論 0 0

友情鏈接更多精彩內(nèi)容