iOS14の頃とiOS15でtableviewの仕様がちょっと??変わったので、めっちゃネットで検索してようやく目的地に辿り着きましたw
(ググっても答えが見つからない分については閃き対応w)
他の方も書かれていますが、こちらでも備忘録としてまとめておこうかな〜とw
1. sectionヘッダーに謎の隙間枠が増えた!
背景色を設定すると分かりやすいw
tableviewの配置が指定した位置よりも下にあるなぁ。という印象だったw
これはsectionHeaderTopPaddingという設定を0にすることで解消する。
ネットで調査したところ、大体が
viewDidLoad
に記述で動く
となっていたので、tableviewを配置する処理後に上記のコードを設定しました^ ^
コードはコチラ↓
if #available(iOS 15.0, *) {
tableviewの変数名.sectionHeaderTopPadding = 0
}
↑
iOS15以前はこの機能がなかったので、分岐必須とのこと。
2. cellの高さが可変の場合、スクロールすると高さが崩れる
これ、私だけかもw
ググっても同じような状態に陥ってる人が居ない?!
それか検索するワードが良くないのかw
ってことで、閃きで対処することに^ ^
ザックリな書き方になるけど、こんな感じにしてみました!
class viewcontroller: UIViewController,
UITableViewDataSource,
UITableViewDelegate {
// 各cellの高さ用配列変数の構造体
struct intcellH {
// セクション番号
var intcellSection: Int
// 行番号
var intcellRow: Int
// cellの高さ
var intcellHeight: CGFloat
}
// 各cellの高さを保管する配列変数
var intcellHeight: [intcellH] = []
--- 省略 ---
}
↑
配列変数に高さを確保していくって感じですw
override func viewDidLoad() {
// tableviewの設定
// cellの大体の高さ見積もり値
tableviewの変数名.estimatedRowHeight = 50
// cellの高さをオートにするらしい
tableviewの変数名.rowHeight = UITableView.automaticDimension
// お決まりのPG
tableviewの変数名.dataSource = self
tableviewの変更名.delegate = self
}
↑
お決まりのPGの上に書かれている
・estimatedRowHeight
・rowHeight
は不要ってネットに書かれていたが、画面を立ち上げた時にデータがなーんも表示されんのよねw
(もしかしたらStoryboardで作っているなら不要ってこと?)
と、いうことで設定してますw
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
--- 省略 ---
// 各cellごとの高さを取得
// ここに作成した配列変数に高さを入れていく
--- 省略 ---
}
↑
各cell作成時に高さを取得!
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// 各cell作成時に取得した値を返す
// ただし初回は配列変数が空なので、分岐必須
}
こんな感じですw
PGないんか〜〜い!!って言われそうだw
まあ、いっかw
これでスクロールしまくっても高さの崩れは起きなくなりましたわ〜w
3. セクション部分をiOS15以前のデザインにする
iOS14時代まではデフォルトのままでかなり見やすいデザインになっていた…。
が!!
iOS15に変わってからはセクションの文字が
ちっちゃ!!
見辛っ!!
ってなってしまったwww
ってことで、カスタムするしかないやん!ってことでコチラ↓
func tableView(_ tableView: UITableview, willDisplayHeaderView view: UIView, forSection section: Int) {
// 背景色の変更
view.tintColor = .systemGray5
// 文字の色変更
let viewupd = view as! UITableViewHeaderFooterView
// ライトモードの場合
if UITraitCollection.current.userInterfaceStyle == .light {
// 黒
viewupd.textLabel?.textColor = .black
// ダークモードの場合
} else {
// 白
viewupd.textLabel?.textColor = .white
}
}
↑
これでiOS14までのセクション表示っぽくなります。
文字の大きさはちっと小さいですがw
文字の大きさを変えるとtableviewの更新時に変な動きするので放置w 教えて分かる人!
よっしゃ!!
なんとかなった!!w
しっかし今回はなかなかに難易度が高かったわ( ´Д`)y━・~~
ではでは!