テーブルビューセルで行の高さをハードコーディングしようとしました。プログラムを実行すると、1行だけのように見えます。テーブルビューの行の高さが原因であると思われます。
ここで何が悪かったのか教えてください。
UITableViewDelegateにこのコードを追加します
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}
viewDidLoad()
で行の高さと推定行の高さを自動に設定します
table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension
heightForRowAt:
高さをUITableViewAutomaticDimension
として設定
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
注:ラベルの行数を設定long restaurant name
として0。
次の手順を実行して、セル/行の高さのレイアウトに自動寸法を有効にします。 (UILabelのサンプルコードと、テーブルセルのコンテンツ固有の高さを設定する方法を次に示します。)
UITableViewAutomaticDimension
をrowHeightおよびexpectedRowHeightに割り当てますheightForRowAt
に値UITableViewAutomaticDimension
を返します)-
@IBOutlet weak var table: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Don't forget to set dataSource and delegate for table
table.dataSource = self
table.delegate = self
// Set automatic dimensions for row height
// Swift 4.2 onwards
table.rowHeight = UITableView.automaticDimension
table.estimatedRowHeight = UITableView.automaticDimension
// Swift 4.1 and below
table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension
}
// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// Swift 4.2 onwards
return UITableView.automaticDimension
// Swift 4.1 and below
return UITableViewAutomaticDimension
}
UITableviewCellのラベルインスタンスの場合
このガイド に従って、これは私にとってはうまくいきましたが、一連の制約を追加する必要があり、行の高さが自動的に計算されます。
要するに、私がやったこと:(ストーリーボードビューの右下にある2つの右端のボタンが制約の追加と変更です)最初にプロトタイプセルのすべてのビューを選択し、すべての制約を削除しました(右端のボタンにニースオプションがあります)、次に、欠落しているすべての制約(そこに別のNiceオプション)を追加し、最後に右から2番目のボタンを選択し、すべての赤い線をクリックしました。すべてのビューを同時に選択しながら、これを行うことができます。そして、それはうまくいきました。
セルがその内容に応じてスペースを占有するようにする場合は、テーブルビューのデリゲートメソッドでITableViewAutomaticDimensionを返す必要がありますheightForRowAt:およびestimatedHeightForRowAt:
Tableviewdelegateで手動で行うことができます。
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100
}