1

数日後、この質問にだまされていますが、進展はありません。私がやりたいことは非常に単純だと思います:

プレーンなTableViewで使用する320x60の画像があります。これらのセルは、画面の幅全体(320)を占めるため、正常に機能します。TableViewのグループ化されたセルは、幅が300で、左右に10のインセット/マージンがあります。

どういうわけかそれらのインセット/マージンを削除して、グループ化されたセルの幅を320にすることはできますか?左のコンテンツインセットを-10に設定してみました。それは左マージンを「削除」しますが、それでも幅はわずか300です。また、ストーリーボードのXMLを編集してみました(私はiOS 5-ストーリーボードで作業しています)が、喜びはありませんでした。

ここでのこの同様の質問は、不可能であるとして回答されました。うまくいけば、2年以上で何かが変更されました!: グループ化されたUITableViewでセル幅を調整します

PS背景画像には素敵な影が含まれているため、幅を変更したいのですが、影を過度に使用するとパフォーマンスの問題が発生する可能性があることを読みました。また、シャドウは境界線の周囲に5ピクセル余分にあるため、標準の幅を使用すると-10ピクセルの幅になります。

よろしくお願いします!

4

2 に答える 2

3

乱雑な解決策は、テーブルビューを幅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...のプロパティを変更したためにアプリが拒否される可能性があります。では、セルをテーブルの幅に合わせるにはどれくらい必要ですか?

于 2012-04-09T09:57:46.673 に答える
0

ストーリーボードからアクセスできるサイズインスペクターで、UITableViewの先頭と末尾のスペースの制約を設定できます。これがいつ追加されたかはわかりませんが、先頭のスペースの制約を-10に設定し、末尾のスペースの制約を10に設定すると、セルが全幅になります。

于 2012-11-12T19:15:17.993 に答える