0

iPadアプリにグループ化されたtableViewがありcell.imageView.center = cell.center、画像を左端に配置するのではなく、中央に配置しようとしています。これは、のサブクラスなしでは明らかに不可能ですUITableviewCell(誰かが理由を説明できれば、それも高く評価されます..今のところ、Java開発者が呼び出すように、それらは「プライベート」変数であると想定しています)。そこで、カスタム tableViewCell を作成しましたが、この tableView の行の 1 つでのみこのセルを使用したいと考えています。だからcellForRowAtIndexPath私は基本的に書く

cell = [[UITableViewCell alloc]initWith//blahblah

if(indexPath.row == 0)
    cell = [[CustomCell alloc]initWith//blahblah

もちろん、これは私が書いていることとまったく同じではありませんが、それがアイデアです。

今、これを行うと機能しますが、このGROUPED tableView の最初のセルは、カスタムセルで何もしなくても、残りのセルよりも幅が広くなります。customCell クラスはまだ変更されていません。ただし、まだ角が丸くなっているため、グループ化されたtableViewであることを認識しているようです。

また、プログラムでセルのサイズを取得するのに苦労していましcellForRowAtIndexPathた。幅が広く、最初のセルは 420 か何かです。それはまだすべてのセルに 320 を書き出します..cell.frame.size.widthcell.contentView.frame.size.width

4

1 に答える 1

0

このコードは、いくつかの理由で機能しません。

cell.imageView.center = cell.center;

まず、中心はそのスーパービューに相対的です。セルのスーパービューはtableViewだと思います。imageView のスーパービューは、セルのコンテンツ ビューになります。したがって、座標系が異なるため、セントはオフセットされます。たとえば、3 番目のセルの下には、幅 0.5 + 高さ 3.5 の中心があります。次のようにして、この問題を回避できるはずです。

cell.imageView.center = CGPointMake( width / 2 , height / 2 );

2 番目の問題は、テーブル ビューのしくみに関連しています。テーブル ビューはそのセル ビューを管理します。セルの幅はテーブル ビューの幅によって定義され、高さはテーブル ビューの行の高さプロパティによって定義されます。これは、セル自体がそのサイズを制御できないことを意味します。

ただし、サブビューのサイズを変更することはできますが、セルのサイズが設定された後にこれを行う必要があります (そうしないと、奇妙な結果になる可能性があります)。これは、(カスタム UITableViewCell クラスの) レイアウト サブビューで行うことができます。 この回答を参照してください

- (void)layoutSubviews {
    [super layoutSubviews];
    self.imageView.frame = ....
}

layoutSubviews呼び出されると、セル フレームが設定されているので、 の代わりにビュー ログをここに記録しますcellForRowAtIndexpath

GROUPEDスタイルについて。これがカスタム ビューで動作するように設計されているかどうかはわかりません。セルのサイズを独自の幅から各サイズの 20 ピクセルのマージンを引いた値に設定し、セクションの上部と下部のセルにマスクを適用して丸みを帯びた効果を得ているのではないかと思います。カスタム ビューを使用している場合は、標準のテーブル ビュー スタイルに固執するようにしてください。

于 2013-01-11T18:49:43.540 に答える