正しいデリゲートとデータソースのリンケージを使用してテーブルビューをセットアップしました。reloadData メソッドは、データソースとデリゲート メソッドを呼び出しますviewForHeaderInSection:。
どうしてこんなことに?
正しいデリゲートとデータソースのリンケージを使用してテーブルビューをセットアップしました。reloadData メソッドは、データソースとデリゲート メソッドを呼び出しますviewForHeaderInSection:。
どうしてこんなことに?
を使用するにtableView:viewForHeaderInSection:は、 も実装する必要がありますtableView:heightForHeaderInSection:。これにより、ヘッダーのゼロ以外の適切な高さが返されます。また、 も実装していないことを確認してくださいtableView:titleForHeaderInSection:。どちらか一方 (viewForHeaderまたはtitleForHeader) のみを使用する必要があります。
秘訣は、これら 2 つのメソッドが異なるUITableViewプロトコルに属してtableView:titleForHeaderInSection:いることです。UITableViewDataSourcetableView:viewForHeaderInSectionUITableViewDelegate
つまり、次のことを意味します。
dataSourceメソッドを実装しても、自分自身を のとしてのみ割り当てた場合
UITableView、
tableView:viewForHeaderInSection実装は無視されます。
tableView:viewForHeaderInSectionの優先度が高くなります。両方のメソッドを実装し、自分自身を
dataSourceおよび のdelegateとして割り当てるとUITableView、セクション ヘッダーのビューが返されますが、あなたのビューは
tableView:titleForHeaderInSection:無視されます。
私も削除しようとしtableView:heightForHeaderInSection:ました; それはうまく機能し、上記の手順に影響を与えないようでした。tableView:viewForHeaderInSectionしかし、ドキュメントには、 が正しく機能するために必要であると書かれています。安全のために、これも実装するのが賢明です。
@rmaddy はルールを 2 回誤って述べています。実際には、も実装する必要はなく、 と の両方を呼び出しても問題ありtableView:viewForHeaderInSection:ません。記録のために、ルールを正しく述べます。tableView:heightForHeaderInSection:titleForHeaderviewForHeader
ルールは、viewForHeader何らかの方法でヘッダーに高さを与えない限り呼び出されないということです。これは、次の 3 つの方法を任意に組み合わせて実行できます。
実装しtableView:heightForHeaderInSection:ます。
テーブルの を設定しますsectionHeaderHeight。
呼び出しますtitleForHeader(これにより、ヘッダーにデフォルトの高さがなければ、ヘッダーにデフォルトの高さが与えられます)。
これらのことを何も行わないと、ヘッダーがなくなり、viewForHeader呼び出されなくなります。これは、高さがないと、ランタイムがビューのサイズを変更する方法を認識できないためです。
実装が return の場合tableView:heightForHeaderInSection:、UITableViewAutomaticDimensionthentableView:viewForHeaderInSection:は呼び出されないことに簡単に注意してください。
UITableViewAutomaticDimensionUITableViewHeaderFooterViewデリゲート メソッドが設定された標準が使用されることを前提としていtableView:titleForHeaderInSection:ます。
のコメントからUITableView.h:
tableView:heightForHeaderInSection:orからこの値を返すと、タイトルが nil でない場合、ortableView:heightForFooterInSection:から返される値に適合する高さが得られます。tableView:titleForHeaderInSection:tableView:titleForFooterInSection:
iOS 7.1でヘッダーが表示されないという問題がありましたが、8.1 と 8.4 で明示的にテストした後のリリースでは問題なく動作しています。
まったく同じコードの場合、7.1 はセクション ヘッダーのデリゲート メソッドをまったく呼び出していませんtableView:heightForHeaderInSection:でしたtableView:viewForHeaderInSection:。
実験の後、作成したヘッダーからこの行を削除viewDidLoadすると、7.1 で再表示され、テストした他のバージョンには影響しないことがわかりました。
// _Removing_ this line _fixed_ headers on 7.1
self.tableView.estimatedSectionHeaderHeight = 80;
…つまり、少なくとも 7.1 では何らかの競合があるようです。
が呼び出されない理由viewForHeaderInSectionは、次の 2 つの理由のいずれかです。
を設定していないかUITableViewDelegate、UITableViewDelegate正しく設定していません。
またはメソッドでtableview.delegateまたはを設定すると、この問題が発生することがあります。これをしないように注意してください...datasource = nilviewWillAppear:viewDidAppear: