見出し画像

Xcode13 x iOS15 x tableViewでの仕様変更による不具合

発生した問題

Xcode13 で ビルドしたアプリが iOS15の iPhone で一部表示がおかしくなった件の修正方法。

1. 謎の余白SectionHeader 使ってる UITableView の上部に謎の余白発生
2. 透け透け。今までは白いすりガラス状態だった SafeAreaの部分が透明に

両方とも同じコードで今までは発生しなかった。

(1) SectionHeader上部の謎の余白の対応方法

スクリーンショット 2021-11-02 18.41.03

iOS15 から sectionHeaderTopPadding というメソッドが 
UITableView に追加された模様で、その名の通り上部余白の設定ができる。
この値がデフォルトで UITableViewAutomaticDimension になっていて結果的に余白が自動で設定される。

@property(nonatomic) CGFloat sectionHeaderTopPadding;

余白なくしたいので素直に0にする。CGFloat なので 気持ち 0.0 にしとくのと、iOS15以降で使えるメソッドなのでそこらへん指定する。

+ if #available(iOS 15.0, *) {
+     tableView.sectionHeaderTopPadding = 0.0
+ }


(2) 透け透けの対応方法

スクリーンショット 2021-11-02 18.50.33

こちらも仕様変更による影響で、白いすりガラス状だったものが透明になっていて、今までの外観に戻すために以下のようなコードが必要になる。
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で言及されていたようなので、
今後はちゃんとウォッチしよう。。。

参考




いいなと思ったら応援しよう!