はじめに
iOS13 にアップデートすると下記のような画面に遭遇。
しんぐるとんが見切れてる
対応
Accessory
に Disclosure Indicator
に設定しているので contentView
の範囲は下の青い範囲。とりあえず clipsToBounds
があやしい。
デフォルトでセルの contentView
の clipsToBounds
が true
になってるので false
に設定。
いけた
調査
とりあえず表示できましたが一応調査。
iOS13 以上でなる模様。
iOS12.4.1 | iOS13.0 |
---|---|
そもそもなんで iOS13 未満は clipsToBounds
が true
なのに表示されるんだ??
調べてみると下記がヒットした。(公式はみつからなかった...)
詳しくはわかりませんが iOS7.1 の頃から UITableViewCell
の contentView
は clipsToBounds
が true
に設定されていても false
になるらしい。
検証
iOS12.4.1 と iOS13 で UITableViewCell
の contentView.clipsToBounds
がどうなってるか調べてみました。
実装はこんな感じ
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! TestTableViewCell
return cell
}
override func awakeFromNib() {
super.awakeFromNib()
print("awakeFromNib clipsToBounds: \(contentView.clipsToBounds)")
}
override func layoutSubviews() {
print("layoutSubviews clipsToBounds: \(contentView.clipsToBounds)")
}
iOS12.4.1 の結果
awakeFromNib clipsToBounds: true
layoutSubviews clipsToBounds: false
iOS13 の結果
awakeFromNib clipsToBounds: true
layoutSubviews clipsToBounds: true
layoutSubviews clipsToBounds: true
なんか2回呼ばれたけどとりあえず clipsToBounds
が true
のままになってる
さいごに
clipsToBounds
を false
にすることで対応しましたが、これでいいのかは不明...今のとこ iOS12 でも iOS13 でもおかしな表示にはなっていません。
そもそも View
からはみ出したレイアウトってどうなんだっていうのはありますが