2011-01-11 20 views
2

私はtableViewを設定しようとしています。私は最後のセクション(1行を含む)以外のすべてのセクションの行に標準セルを使用します。したがって、特別なレイアウト以外のすべてのセクションに標準レイアウトを使用したいと考えています。UITableViewの "default"メソッドへのアクセス

短い例は、(一つだけの行がある)私の「特別な」細胞は、セクション3であり、以下の通りである:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    if (section == 3) 
     return 5; 
    return **????**; 
} 

私はUITableViewから計算された幅を返したいと思います(ちょうど私がメソッドを実装しなかったかのように)。

[super self:tableView heightForHeaderInSection:(NSInteger)section];

は機能しません。私は、デフォルトの10であると明らかに私は、追加のスペースが必要になります他のセクションのセクション見出しを、持っていることを考慮に入れていない

[tableView setionHeaderHeight] 

にアクセスすることができます知っています。私はそれを試みたが、セクションが近すぎる(スクリーンショットを参照)。

(注:興味があるセクションは、セルのようには見えないセクションです。 ))。

したがって、最も簡単なことは、セクション3を除いて、完全な標準実装にレイアウトを引き渡すことです。

私のオプションは何ですか?

答えて

1

UITableViewDelegateの抽象基本実装をサブクラス化していないため、スーパー実装tableView:heightForHeaderInSection:はありません。デリゲートの実装を調べてメソッドが利用可能かどうかを調べることによって、デフォルトの高さを使用する必要がある場合は、テーブルビューが代わりに決定されます。

特にJavaやC#から来ている場合、あなたの頭を包み込むのはかなり大きな概念です。 Objective-Cプロトコルのメソッドはオプションであり、その不在の意味はで、デフォルトはです。

あなたの方法は、おそらくとして実装する必要があります。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    if (section == 3) { 
     return 5; 
    } else { 
     return 36; 
    } 
} 

グループ化し、平野tableviewsのデフォルトの高さは、(プレーン用22points)異なっています。デフォルト値はUITableViewによって公開されず、プライベートメソッドでもありません。 http://bugreport.apple.comにバグを報告して、これを公開定数にしてください。

+0

...私が書いたように:それは上記の図のようなレイアウトにつながります。 taleView.sectionHeaderHeightはセクション見出しに必要なスペースを考慮しません。 taleView.sectionHeaderHeightは10ですが、これは十分ではありません。実験から、私は約35が必要だと言っています。したがって、メソッドを実装していないときに正しいレイアウトを計算するコードがあるはずです。それを明示的に呼びたいと思います。 – Axel

+0

答えを正しい定数で更新しました。 – PeyloW

+0

もっと実験的に、setHeaderHeight(sectionHeading)の値は、セクション0の場合は45、その他の場合は約35です。 – Axel

3

あなたはちょっと混乱しているようです。テーブルセクションヘッダーの高さを返します(これはテーブルセクションの「タイトル」です)。行ではありません。 iOSはこのメソッドを呼び出して、他のセクションヘッダーに関係なく、単一のセクションヘッダーの高さを要求します。 3以外のセクションには、デフォルトでは[tableView sectionHeaderHeight]が返されます。「他のセクションヘッダーがあることを考慮する必要はありません。」というメッセージが表示されます。 sectionのみのヘッダー。他の人の高さを再度尋ねる(そして行と他のセクションの相対位置を自動的に計算する)。

+0

私は説明が明確になりました。私は混乱していないと確信しています。たぶん説明が混乱していたかもしれません... – Axel

+0

デフォルト値を返すとレイアウト全体が間違っています - セクションヘッダーは明らかにセクション見出しを考慮に入れません。 – Axel

+0

「レイアウト全体が間違っています」と定義します。私はあなたが「セクションヘッダーは明らかにセクション見出しを考慮に入れていません」とは何を意味するのか分かりません。定義上、セクション見出しです。デリゲートメソッド 'tableView:viewForHeaderInSection:'を介してカスタムヘッダービューを返していますか?そうであれば、適切なビューの高さを返すことができます。 –

0

heightForHeaderInSectionをオーバーライドしてサイドバイサイド比較を行った後、最初の行のヘッダーの高さは残りの部分よりも大きくなります。これは完璧な画素でないが、それは非常に近いです:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section 
{ 
    if (section == 0) { 
     return 46.0; 
    } else if (section == myCustomRow) { 
     return 12345.0; // custom height 
    } else { 
     return 36.0; 
    } 
} 
6

念のために:UITableViewAutomaticDimensionと呼ばれるのiOS 5で導入された新しい定数があります。ドキュメントによれば、UITableViewにデフォルト値を使用する場合は、デリゲートメソッドから返す必要があります。

だから、あなたのケースのためのコードは次のようになります。

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 
    if (section == 3) { 
     return 5; 
    } else { 
     return UITableViewAutomaticDimension; 
    } 
} 
関連する問題