2017-02-03 16 views
0

私はUIViewControllerを作成し、それにUITableViewを追加しました(autolayoutで4つのエッジすべてに固定)。セクションのカスタムUIView内でUITableViewを自動サイズ調整

次に、estimatedRowHeight(44)とrowHeightUITableViewAutomaticDimension)を設定し、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 
    } 
} 

これは次のように表示されます。

enter image description here

そして私はタップやスクロール、全ての赤血球消えます。どうなり得るか? UITableViewにコンテンツを動的にロードさせる方法とUITableViewHeaderFooterViewは、サイズがUITableView.contentSizeになるようにサイズを変更します。出来ますか?

答えて

1

チェックアウト:

tableView(_:estimatedHeightForFooterInSection:)

tableView(_:heightForFooterInSection:)

ます。またheaderInSectionためequilavantを持っています。

+0

はい、それは素晴らしいようです。私はそれを表示するようにしました。 しかし問題はそれです: 'tableView(_:heightForFooterInSection:)'で 'header.tableView.contentSize.height'を返します。しかし、コンテンツはまだ計算されておらず、 'header.tableView'で推定された行の高さを使用し、全体の' contentSize.height'を 'numberOfRows * estimatedRowHeight'として計算します。しかし、実際の行のサイズは 'UITableViewAutomaticDimensions'です。 –

+1

@OlexiyPyvovarovこのメソッドのポイントは、contentSizeの高さ(セルの高さ)を何に設定するかを知ることです。contentSizeの高さをコースの高さに設定するように頼んでください。 "autosize"する必要がある場合は、 UITableViewAutomaticDimensionsを使用するか、メソッド内で手動で高さを計算してそこに戻します。 –

+0

まだ行が表示されていないので、サイズは計算されません。 しかし、動的な行の高さでコンテンツのサイズ全体を計算するメソッドを手動で作成しました。ありがとうございました! –

0

テーブルのヘッダーとフッターの表示を求めているので、説明するデリゲートメソッドをスキップできます。それらは(名前が暗示するように)SECTIONヘッダーとフッター用です。

AutoLayoutをテーブルのヘッダーまたはフッターとして使用しているビューを設定すると、そのフレームの高さはゼロになります(そのようなビューのボタンは、タッチを受けていないため動作しません)。

AutoLayoutを使用してテーブルのヘッダーまたはフッタービューのサイズを正しく設定するには、実際に高さを計算するためのトリックを適用し、headerViewを再度設定する必要があります。それは、これらのような多くの記事で詳しく説明されています

https://stackoverflow.com/a/28102157/756039 https://gist.github.com/marcoarment/1105553afba6b4900c10 http://collindonnell.com/2015/09/29/dynamically-sized-table-view-header-or-footer-using-auto-layout/ http://roadfiresoftware.com/2015/05/how-to-size-a-table-header-view-using-auto-layout-in-interface-builder/

は、この情報がお役に立てば幸いです。

+0

ああ、私はちょっと混乱しています:)セクションヘッダーが必要で、テーブルビューヘッダー全体が必要ではありません。まだ答えが適用されていますか? –

+0

すばやく検索すると、次のようになります。http://stackoverflow.com/a/29763200/756039 –

+0

@OlexiyPyvovarovセクションでヘッダーとフッターの高さを設定する方法に関する私の答えはありませんでしたか? –

関連する問題