7

私はストーリーボードを使用して iOS 5 プロジェクトに取り組んでいるため、IB で動的テーブル セル プロトタイプを使用しています。ビューの 1 つで、セルの高さがコンテンツの高さから計算された、高さが可変のセルを含むテーブル ビューがあります。

tableView:heightForRowAtIndexPath:テーブル ビューが最初に表示されたときに、すべてのセルに対して正しい値を返します。いくつかのアイテムを下にスクロールするとすべて問題ありませんが、何かがうまくいかないことがあります。実際のセルは、タッチ領域を含めて正しい高さのように見えますが、セパレーターが間違った場所 (セル間ではなくセル内) にレンダリングされます。

セパレーターの配置を測定すると、セルの再利用がこれと関係があるように見えます。最初の 3 つのセルのセパレータは正しく表示されますが、4 番目のセルは正しく表示されません。heightForRowAtIndexPath:正しい高さ (この場合は 125 ピクセル) を返し、含まれるサブビューはすべて適切な場所に配置されます。ただし、セパレータは前のセパレータから 108 ピクセルだけレンダリングされ、セルの高さ 125 ピクセルの領域内に配置されます。

キッカーは次のとおりです。108px は最初のテーブル セルの高さで、現在は見えなくなっており、おそらく再利用されています。これについて明確な証拠はありませんが、テーブル ビューはheightForRowAtIndexPath:これらのセルを無視しており、再利用されたセルの高さに応じてセパレータをレンダリングしているようです。

これは、後の短いセルの束がセパレーターとしてまったくレンダリングされない理由を説明していません。しかし、これは私が続けなければならないすべてです。

回避策、IB 設定、またはその他に役立つものはありますか?

4

2 に答える 2

1

この奇妙な問題にも遭遇しました。カスタム テーブル セルの場合は、区切りとしてレイヤーを追加する方が適切な場合があります。

カスタム テーブル セル クラスの initWith*** メソッド内:

separator = [CALayer layer];
separator.backgroundColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor;
[self.layer addSublayer:separator];

layoutSubviews メソッドでセパレーターのフレームを更新します。

- (void)layoutSubviews {
   CGFloat height = 1.0f;
   separator.frame = CGRectMake(0.0f, self.frame.size.height - height, self.frame.size.width, height);
   [super layoutSubviews];
}
于 2012-07-10T05:38:13.690 に答える