乱雑な解決策は、テーブルビューを幅340ピクセル、画面の左端から10ピクセル離すことです。
プライベートクラスのプロパティを変更することを含む解決策は、サブクラスを作成し、そのメソッドUITableViewCell
をオーバーライドすることです。layoutSubviews
サブビューをログに記録すると、次のことがわかります。
"<UIGroupTableViewCellBackground: 0x95246b0; frame = (9 0; 302 45); autoresize = W; layer = <CALayer: 0x95226b0>>",
"<UITableViewCellContentView: 0x92332d0; frame = (10 0; 300 43); layer = <CALayer: 0x9233310>>",
"<UIView: 0x95248c0; frame = (10 0; 300 1); layer = <CALayer: 0x951f140>>"
これらのサブビューを取得して、使用可能な範囲全体を埋めるとどうなりますか?
- (void)layoutSubviews;
{
// By default the cell bounds fill the table width, but its subviews (containing the opaque background and cell borders) are drawn with padding.
CGRect bounds = [self bounds];
// Make sure any standard layout happens.
[super layoutSubviews];
// Debugging output.
NSLog(@"Subviews = %@", [self subviews]);
for (UIView *subview in [self subviews])
{
// Override the subview to make it fill the available width.
CGRect frame = [subview frame];
frame.origin.x = bounds.origin.x;
frame.size.width = bounds.size.width;
[subview setFrame:frame];
}
}
この特定の瞬間、iOS 5.1シミュレーターでは、これは機能します。現在、iOSの将来のバージョンでは、これらのクラスが再構築され、このメソッドがテーブルレイアウトを壊滅的に混乱させる可能性があります。フレームを変更するだけでも、UITableViewCellContentView...のプロパティを変更したためにアプリが拒否される可能性があります。では、セルをテーブルの幅に合わせるにはどれくらい必要ですか?