iOS11変更点についてはネットで良い記事があるので今回は自分が参加しているプロジェクトに対して対応していた内容をまとめてみました。
まず、現在のプロジェクトの状況を簡単に説明をすると、5年以上経っているプロジェクトでObj-Cとswift3が共存している。かなり古いプロジェクトです。部分的にstoryboardを導入しているが、xibも使わず、コードで画面作りしてところもかなり多いプロジェクトです。
修正した箇所は色々あったんですが、「おれっ」と思ったのが大きく下記の5つです。
- ナビゲーションバーの仕様変更
- UI系のメインスレッドの警告
- UITableViewのcell高さ設定の仕方
- @objc swift <-> Obj-Cの共有メソッド
- Toolbarの使い方
この記事はiOS11 beta10の基準で書いています。対応方法はは色々あると思うので、あくまで参考までにしてください。
1. ナビゲーションバーの仕様変更
iOS11からナビゲーションバーLarge Titleができるようになり、UI的に色々変わったらしい。
現在のプロジェクトでTitleViewにカスタマイズしたViewを入れたりUIButtonボタンを入れたりするところがあったのでそれが原因でクラッシュする現象が発生していました。
クラッシュタイミングは画面と画面の遷移の際に、正確に言うと遷移するアニメーション処理で起きています。
もちろんPush, PopするときにanimatedをNOにするとクラッシュはしないが、根本的な対応ではないのでこのプロジェクトではカスタマイズしたビューを削除することに。
きちんとするならiOS11にふさわしいUIデザインを書き直しをする対応がベストだと思います。
新しいUINavigationBar, UINavigationItem & UIRefreshControl #WWDC17 #WWDC2017
2. UI系のメインスレッドの警告
XCode9からなんかメインスレッドで処理すべき処理に対してチェックする機能ができたらしく。
紫色の警告が表示されるようになっています。
潜在バグでUI系の処理がスレッドになってしまい、正常に動作しない処理を気づくことができて直しました。
関連記事はこちら。
https://developer.apple.com/documentation/code_diagnostics/main_thread_checker
3. UITableViewのcell高さ設定の仕方
一番苦労した件ですが、動的セールで高さがそれぞれ違う場合、遷移して戻ったり、datasource更新によりreloadDataしたりするとOffsetがずれる現象が発生していました。
原因はTableViewのdelegateメソッドのestimatedHeightForRowAtIndexPathを実装していなかったからです。iOS11からは実装が厳しくなったらしいです。とりあえず同じロジックを書くことで対応できました。
1 2 3 4 5 6 7 |
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return [self getCellHeight:indexPath]; } - (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { return [self getCellHeight:indexPath]; } |
4. @objc swift <-> Obj-Cの共有メソッド
Swiftで書いたメソッドをObj-Cで使うと必ず @objcを頭に書く必要になったようです。まめに書きましょう。
おまけで、上記の件でビルドログがうるさくなるので以下のbuild settingを書いておくと静かになります。
5. Toolbarの使い方
今のプロジェクトってUIToolbarを画面ことにあり、なぜかこれを見た目の理由でカスタマイズしていました。本来のToolbarで抽象化されている機能ではなく、UIButtonをaddsubViewしてるのが問題。
そもそも、それ実装の仕方が気に入ってないが、iOS11からはタッチが効かなくなっているのでUIViewで全て書き直しました。
やっぱり、Cocoa Frameworkに優しい書き方をしないとバージョンアップするときに大変なことになることを実感しています。
以上ですが、間違っている内容もあると思うのでご参考まで。
>3. UITableViewのcell高さ設定の仕方
困っているところ非常に参考になりました!
どこかで調べてきた内容なのでしょうか?
もし参考記事ありましたら教えて頂きたく存じます。