0

1 つのビューに 2 つのテーブルがあります。表 A に多数のユーザーを示します。表 B にユーザー オブジェクトを示します。テーブル A で行が選択されると、そのユーザーに属するオブジェクトがテーブル B に再ロードされます。

したがって、ユーザーが表 A の行を選択すると、セルの背景の画像が強調表示されたバージョンの画像に変わります。

背景画像の通常バージョンは次のとおりです。デフォルトの画像

背景画像の強調表示されたバージョンを次に示します。ここに画像の説明を入力

ご覧のとおり、強調表示されたバージョンの右側に小さな矢印があります。この矢印は、表自体のセルの幅を超えています。行が選択されると、イメージが変更されますが、イメージ全体がセルに収まるようにサイズが縮小されます。

私がしたいのは、画像がテーブルの外に出ること、またはその選択された行のテーブルの上にあることです。

私が考えた解決策の 1 つは、テーブルを選択した行の中央に配置し、その画像をオーバーレイすることでしたが、ユーザーがテーブルをスクロールしようとすると、画像を移動する必要があり、それは非常に面倒でした。

だから私が知りたいのは、セルのサイズを選択したテーブルを超えて拡張することは可能ですか?

前もって感謝します!

編集:

誰かがしようとした場合に備えて、次は機能しません。

[cell setFrame:CGRectMake(cell.frame.origin.x, cell.frame.origin.y, cell.frame.size.width+20, cell.frame.size.height)];

4

2 に答える 2

2

ビューの clipsToBounds プロパティを NO に設定すると、ビューが独自のフレームの外に描画できるようになります。

UITableViewController サブクラスで:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do what you normally do here, if anything then add...

    self.view.clipsToBounds = NO;
}

これを行うと、部分的にスクロールして表示されるのではなく、テーブルビューの下部または上部に完全なセルが作成されるという副作用があります。clipsToBounds が YES に設定されている別のビューにテーブル ビューを配置するか、テーブル ビューの端を画面の端に揃えるか、ビューが上下を覆うようにします (UIToolbar と UINavigationBar が通常行うように)。

UITableViewCell の selectedBackgroundView をテーブル ビューのフレームを超えて拡張するには、UITableViewCell のサブクラスを作成し、layoutSubviews メソッドをオーバーライドします。

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
    if (self) {
        // Initialization code

        self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"YQGyZ"]];
        self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"CQXYh"]];

        self.textLabel.backgroundColor = [UIColor clearColor];
        self.detailTextLabel.backgroundColor = [UIColor clearColor];
    }
    return self;
}

- (void)layoutSubviews {
    [super layoutSubviews];

    CGRect frame = self.selectedBackgroundView.frame;
    frame.size.width += 13; // where 13 is the size of the arrow overhang from the same images
    self.selectedBackgroundView.frame = frame;

    // You can also change the location of the default labels (set their background colors to clear to see the background under them)
    self.textLabel.frame = CGRectMake(70, 0, 148, 30);
    self.detailTextLabel.frame = CGRectMake(70, 30, 148, 30);
}

幸運を。

于 2012-08-02T15:30:09.813 に答える
0

選択されていないセルの背景の画像リソースを変更して、選択した背景と同じ幅になるように変更することをお勧めしますが、横に透明な四角形があるだけです。

于 2012-08-02T04:13:36.823 に答える