私はUIViewControllerを作成し、それにUITableViewを追加しました(autolayoutで4つのエッジすべてに固定)。セクションのカスタムUIView内でUITableViewを自動サイズ調整
次に、estimatedRowHeight
(44)とrowHeight
(UITableViewAutomaticDimension
)を設定し、5つのカスタムセルを返しました。そしてそれは働いた。
ここで、動的な高さを持つカスタムUITableViewHeaderFooterView
を追加します。
私は次のやってる:
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 88.0
}
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
return R.nib.orderStatusHeaderView.firstView(owner: self)!
}
私OrderStatusHeaderViewは、自動レイアウトを持つすべての4辺にピン留め、その上のUITableViewを持っているXIB図です。
OrderStatusHeaderView
:
final class OrderStatusHeaderView: UITableViewHeaderFooterView {
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.dataSource = self
tableView.delegate = self
tableView.rowHeight = 44.0
}
}
}
extension OrderStatusHeaderView: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: .default, reuseIdentifier: "\(indexPath.row)")
cell.textLabel?.text = "\(indexPath.row)"
cell.backgroundColor = .red
return cell
}
}
これは次のように表示されます。
そして私はタップやスクロール、全ての赤血球消えます。どうなり得るか? UITableView
にコンテンツを動的にロードさせる方法とUITableViewHeaderFooterView
は、サイズがUITableView.contentSize
になるようにサイズを変更します。出来ますか?
はい、それは素晴らしいようです。私はそれを表示するようにしました。 しかし問題はそれです: 'tableView(_:heightForFooterInSection:)'で 'header.tableView.contentSize.height'を返します。しかし、コンテンツはまだ計算されておらず、 'header.tableView'で推定された行の高さを使用し、全体の' contentSize.height'を 'numberOfRows * estimatedRowHeight'として計算します。しかし、実際の行のサイズは 'UITableViewAutomaticDimensions'です。 –
@OlexiyPyvovarovこのメソッドのポイントは、contentSizeの高さ(セルの高さ)を何に設定するかを知ることです。contentSizeの高さをコースの高さに設定するように頼んでください。 "autosize"する必要がある場合は、 UITableViewAutomaticDimensionsを使用するか、メソッド内で手動で高さを計算してそこに戻します。 –
まだ行が表示されていないので、サイズは計算されません。 しかし、動的な行の高さでコンテンツのサイズ全体を計算するメソッドを手動で作成しました。ありがとうございました! –