web-dev-qa-db-ja.com

UILabelテキストの量に基づくUITableViewCellの自動高さ

ストーリーボードに少しトリッキーなセットアップがあり、UITableViewControllerを保持するUIViewControllerがあります。 UITableViewController内には、コード内のサブクラス化されたuitableviewcellオブジェクトにリンクしたいくつかのプロトタイプセルがあります。

制約とストーリーボードを使用して、UILabelのサイズに応じてプロトタイプセルの高さを変更したいと思います。

現在、私は

UIViewController
-- UITableViewController
-- -- UITableViewCell ((melchat) prototype cell)
-- -- -- ContentView
-- -- -- -- UIView ((background) view with drop shadow card type effect)
-- -- -- -- -- UIImageView (Avatar)
-- -- -- -- -- IUlabel (dynamic (depending on code/input) multi line UILabel)

UILabelでUIView(背景)のサイズを変更してから、そのUITableViewCellの高さを変更する方法がいくつかあります。

XCode 8.2.1を使用しています

ストーリーボードのレイアウトと適用された制約のスクリーンショットを撮りました。

enter image description here

更新

ほぼすべてがContentViewに戻るように制約を更新し、uilabelの行数を0に更新し、UITableViewAutomaticDimensionコードも実装しましたが、まだ機能していません。以下のコードとスクリーンショットをご覧ください。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return UITableViewAutomaticDimension;

}

enter image description here

enter image description here

12
HurkNburkS

Daoの答えをもう少し詳しく説明します。

彼は正しいです、あなたはUITableViewAutomaticDimensionを使用する必要があります

また、セル内のすべてのコンテンツがセルのcontentViewに制約されるように、制約を設定する必要があります。したがって、ラベルには次のような制約が必要になる可能性があります。

  • ImageViewへの主要な制約
  • ContentViewの上位の制約
  • ContentViewの下部の制約
  • ContentViewの末尾の制約

UILabelをmultiline(またはlines = 0)に設定し、それが機能することを確認してください。

HeightForRowAtデリゲート関数を使用している場合は、必ずUITableViewAutomaticDimensionを返すようにしてください

24
Scriptable

UITableViewAutomaticDimensionを使用

tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 300
13

step1:contentViewの内部にあるUIViewに制約を与えます。

  • ContentViewの主要な制約
  • ContentViewの上位の制約
  • ContentViewの下部の制約
  • ContentViewの末尾の制約

ステップ2:UIlabelに以下の制約を与える

  • UIImageViewへの主要な制約
  • UIViewの上位の制約
  • UIViewの下部の制約
  • UIViewの末尾の制約

step3:次に、IUlabelのトレーリング制約を選択し、編集オプションを選択してから、定数を選択し、greaterThanEqualオプションを選択します。

ステップ4:ラベルの_numberofline = 0_を設定します

ステップ5:このコードをviewDidLoad()に追加します

_yourtableview.estimatedRowHeight = 80.0
yourtableview.rowHeight = UITableViewAutomaticDimension
_
9
Brijesh Shiroya

Swift 4.2および5。上記のように、UITableViewオブジェクトプロパティを設定するか、

tblView.rowHeight = UITableView.automaticDimension 
tblView.estimatedRowHeight = 300

uITableViewDelegateメソッドを実装することで同じことを定義することもできます

extension ViewController: UITableViewDelegate {
      func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
        return 300
      }
      func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableView.automaticDimension
      }
    }
5
Gurjinder Singh