UITableCellの仕様を扱うUIListContentConfigrationについて

2023/03/30に公開

俺たちの cell.textLabel が will be deprecated になっちまった

代わりに UIListContentConfigration とおっしゃっています。そこで今回はこの UIListContentConfigration を見ていきます。

注意

SwiftUIではなく従来方式で記事を書きます。
ただし、Storyboardを使わないでコードで書きます。

基本系

let cell = //セル取得
var cc = cell.defaultContentConfiguration()
cc.text = "セルのテキスト"
cell.contentConfiguration = cc
return cell

defaultContentConfiguration() で取得できるものは UIListContentConfigration です。

UIListContentConfigrationってなんぞ?

https://developer.apple.com/documentation/uikit/uilistcontentconfiguration

iOS14〜 で使えます。セルの中身を設定するものです。
上のリンク先によると、

セル、ヘッダー、フッターなど、リストに表示される個々の要素のスタイリングとコンテンツを記述します。

とのことです。見た目と内容の両方扱うものですな。

少し視野を広げまして...

UITableViewCell にiOS14から

  • contentConfiguration というプロパティ
  • その contentConfiguration に入れるものを手っ取り早く入手する手段として defaultContentConfiguration() というメソッド。 UIListContentConfigration を返す。

が用意されています。

@available(iOS 14.0, tvOS 14.0, *)
extension UITableViewCell {

    @available(iOS 14.0, tvOS 14.0, *)
    @MainActor public var contentConfiguration: UIContentConfiguration?

    @available(iOS 14.0, tvOS 14.0, *)
    @MainActor public func defaultContentConfiguration() -> UIListContentConfiguration
}

ただ、上のように2つのものは型が違います。ちょっとややこしいのですが UIContentConfiguration はプロトコルで、その具体的な型が UIListContentConfiguration です。

@available(iOS 14.0, tvOS 14.0, *)
public protocol UIContentConfiguration {
    //略
}
@available(iOS 14.0, tvOS 14.0, *)
public struct UIListContentConfiguration : UIContentConfiguration, Hashable {
    //略
}

UIListContentConfigration に設定できる項目は上に上げたAppleのドキュメントにいろいろ書いてます。

ちなみに

cell直下にある contentConfiguration を直接設定することは出来ません。

いろいろなパターン (メイン文字、サブ文字、画像)

var cc = cell.defaultContentConfiguration()
cc.text = text[indexPath.row]
cc.secondaryText = subText[indexPath.row]
cc.image = UIImage(systemName: "baseball")

いろいろなパターン (フォント、色)

var cc = cell.defaultContentConfiguration()

cc.text = text[indexPath.row]
cc.textProperties.font = UIFont.systemFont(ofSize: 30.0)
cc.textProperties.color = teamColors[indexPath.row]

cc.secondaryText = subText[indexPath.row]
cc.secondaryTextProperties.color = teamColors[indexPath.row]

cc.image = UIImage(systemName: "baseball")
cc.imageProperties.tintColor = teamColors[indexPath.row]

cell.contentConfiguration = cc

default以外何があるの?

defaultContentConfiguration() で作成してきましたが、それ以外も基本系を提供するstaticメソッドがあります。一例を挙げます。

cell

defaultに近いですな。

var cc = UIListContentConfiguration.cell()

subtitleCell

間がつまっている。

var cc = UIListContentConfiguration.subtitleCell()

valueCell

右端にセコンダリーテキストが移動。

var cc = UIListContentConfiguration.valueCell()

Discussion