ストーリーボードに少しトリッキーなセットアップがあり、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を使用しています
ストーリーボードのレイアウトと適用された制約のスクリーンショットを撮りました。
ほぼすべてがContentViewに戻るように制約を更新し、uilabelの行数を0に更新し、UITableViewAutomaticDimensionコードも実装しましたが、まだ機能していません。以下のコードとスクリーンショットをご覧ください。
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}
Daoの答えをもう少し詳しく説明します。
彼は正しいです、あなたはUITableViewAutomaticDimension
を使用する必要があります
また、セル内のすべてのコンテンツがセルのcontentViewに制約されるように、制約を設定する必要があります。したがって、ラベルには次のような制約が必要になる可能性があります。
UILabelをmultiline(またはlines = 0)に設定し、それが機能することを確認してください。
HeightForRowAtデリゲート関数を使用している場合は、必ずUITableViewAutomaticDimension
を返すようにしてください
UITableViewAutomaticDimension
を使用
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 300
step1:contentViewの内部にあるUIViewに制約を与えます。
ステップ2:UIlabelに以下の制約を与える
step3:次に、IUlabelのトレーリング制約を選択し、編集オプションを選択してから、定数を選択し、greaterThanEqualオプションを選択します。
ステップ4:ラベルの_numberofline = 0
_を設定します
ステップ5:このコードをviewDidLoad()
に追加します
_yourtableview.estimatedRowHeight = 80.0
yourtableview.rowHeight = UITableViewAutomaticDimension
_
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
}
}