web-dev-qa-db-ja.com

テーブルビューのセル行の高さが機能しない

enter image description here

テーブルビューセルで行の高さをハードコーディングしようとしました。プログラムを実行すると、1行だけのように見えます。テーブルビューの行の高さが原因であると思われます。

ここで何が悪かったのか教えてください。

19
Agung Laksana

Xcode 9では、tableviewAutolayoutに基づいて推定セルを自動的に作成します。あなたは自動レイアウトを提供していないので、これがあなたがこれを得ている理由です。

Tableviewを選択して、推定および自動セルサイズを無効にし、2つのオプションをオフにする必要があります。

enter image description here

行の高さに値を指定すると、それに応じてセルが作成されます。

これが役立つことを願っています。

42
Irfan

UITableViewDelegateにこのコードを追加します

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 100
}
3
Leo

viewDidLoad()で行の高さと推定行の高さを自動に設定します

table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension

heightForRowAt:高さをUITableViewAutomaticDimensionとして設定

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return UITableViewAutomaticDimension
}

注:ラベルの行数を設定long restaurant nameとして0。

3
luckyShubhra

次の手順を実行して、セル/行の高さのレイアウトに自動寸法を有効にします。 (UILabelのサンプルコードと、テーブルセルのコンテンツ固有の高さを設定する方法を次に示します。)

  • DataSourceとデリゲートを割り当てて実装します
  • 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のラベルインスタンスの場合

  • 行数を0に設定(&改行モード=末尾を切り捨て)
  • スーパービュー/セルコンテナに関してすべての制約(上、下、右左)を設定します。
  • オプション:データがなくても、ラベルで覆われる最小の垂直領域が必要な場合は、ラベルの最小高さを設定します。

enter image description here

1
Krunal

このガイド に従って、これは私にとってはうまくいきましたが、一連の制約を追加する必要があり、行の高さが自動的に計算されます。

要するに、私がやったこと:(ストーリーボードビューの右下にある2つの右端のボタンが制約の追加と変更です)最初にプロトタイプセルのすべてのビューを選択し、すべての制約を削除しました(右端のボタンにニースオプションがあります)、次に、欠落しているすべての制約(そこに別のNiceオプション)を追加し、最後に右から2番目のボタンを選択し、すべての赤い線をクリックしました。すべてのビューを同時に選択しながら、これを行うことができます。そして、それはうまくいきました。

0
findusl

セルがその内容に応じてスペースを占有するようにする場合は、テーブルビューのデリゲートメソッドでITableViewAutomaticDimensionを返す必要がありますheightForRowAt:およびestimatedHeightForRowAt

0
Mansi

Tableviewdelegateで手動で行うことができます。

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    return 100
}
0
gbarnett