Xcode13 x iOS15 x tableViewでの仕様変更による不具合
発生した問題
Xcode13 で ビルドしたアプリが iOS15の iPhone で一部表示がおかしくなった件の修正方法。
1. 謎の余白。SectionHeader 使ってる UITableView の上部に謎の余白発生
2. 透け透け。今までは白いすりガラス状態だった SafeAreaの部分が透明に
両方とも同じコードで今までは発生しなかった。
(1) SectionHeader上部の謎の余白の対応方法
iOS15 から sectionHeaderTopPadding というメソッドが
UITableView に追加された模様で、その名の通り上部余白の設定ができる。
この値がデフォルトで UITableViewAutomaticDimension になっていて結果的に余白が自動で設定される。
@property(nonatomic) CGFloat sectionHeaderTopPadding;
余白なくしたいので素直に0にする。CGFloat なので 気持ち 0.0 にしとくのと、iOS15以降で使えるメソッドなのでそこらへん指定する。
+ if #available(iOS 15.0, *) {
+ tableView.sectionHeaderTopPadding = 0.0
+ }
(2) 透け透けの対応方法
こちらも仕様変更による影響で、白いすりガラス状だったものが透明になっていて、今までの外観に戻すために以下のようなコードが必要になる。
UINavigationBarAppearance は iOS13以降使える NavigationBar の見た目をカスタマイズするためのメソッド。
+ @available(iOS 13.0, *)
+ func setBarColor() {
+ let appearance = UINavigationBarAppearance()
+ appearance.configureWithOpaqueBackground()
+ appearance.backgroundColor = .white
+ self.navigationController?.navigationBar.standardAppearance = appearance;
+ self.navigationController?.navigationBar.scrollEdgeAppearance = self.navigationController?.navigationBar.standardAppearance
+ }
override func viewDidLoad() {
+ if #available(iOS 13.0, *) {
+ setBarColor()
+ }
https://developer.apple.com/forums/thread/682420?answerId=678641022#678641022
どちらの現象もWWDC2021で言及されていたようなので、
今後はちゃんとウォッチしよう。。。