2017-03-23 5 views
3

マイiOSアプリは、次のレイアウトを有するもののUITableViewCellとテーブルビュー(2つのラベルと1つのボタンを含む1 stackview)リサイズUIStackViewユーザがボタンタップするラインのUILabelの数を変更した後

enter image description here

を有します中央のラベルの行数は、0から2になり、次のようになります。

enter image description here

が今ここに二つの問題があります私は、スタック内の空のビューを追加することから成る問題1ない最適解を発見した細胞

リサイズUIStackView

2)をサイズ変更

1)。 (invalidateIntrinsicContentSizeは機能しませんでした)。

let emptyView = UIView() 
emptyView.frame = CGRect(x: 0, y: 0, width: 0, height: 0) 
stackView.addArrangedSubview(emptyView) 

2番目のスクリーンショットでわかるように、セルのサイズが変更されず、これがスタックビューかセル自体に起因するかどうかはわかりません。

ボタンイベントが内部で処理されるため、UITableViewCellサブクラス内にコードを記述していることを指摘したいと思います。

// dynamic cell sizing 
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 

    return UITableViewAutomaticDimension 
} 

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 

    return CGFloat(cellEstimatedHeight) 
} 
+0

indexPathのテーブルビューのリロードを開始していますか? –

+0

セルの中からやったよ: 'let tableview = self.superview as? UITableview tableview.reloadData() ' しかしそれは動作しません – Claus

+0

私はそれがちょうど1つの行のために同じになると思います – Claus

答えて

0

UIStackViewまたはそれは、独自のフレーム内のビューを配置するのではなく、独自のフレームを調整するためのより多くの設計されています...あなたの最善の策であってもなくてもよい:テーブルビューは動的なサイズ変更を使用しているレコードの場合

ビューに。

あなたがそこにあるように単純なレイアウトの場合、通常の制約で要素をレイアウトするほうがずっと良いでしょう。

この例を見てみましょう:https://github.com/DonMag/DynamicCellHeight

表B(表Aは、私が一緒に遊ん別のレイアウトのためだった)あなたのレイアウトを達成する1つのの方法です。

セルがリサイズされている間にメインラベルを残すにはちょっとトリッキーな作業が必要でした。おそらくもっと良い方法を見つけることができました。

意味がある場合は教えてください。疑いの余地はありませんが、いくつかの調整が必要です。

+0

私は、私が試してみました のUITableViewのセル内からセルのサイズ変更をトリガする方法が必要になります 'self.stackView.invalidateIntrinsicContentSize()' 'self.setNeedsLayout()' 'self.setNeedsDisplay() ' しかし何も – Claus

+0

私に分を与える...私はあなたのための例を持っているでしょう... – DonMag

+0

私は単純なレイアウトを使用することができますが、正直言って私はUIStackViewが動作する方法が好きで、私はこの選択肢。 – Claus

関連する問題