15

サブビューを UITableViewCell に追加しようとしていますが、この特定のサブビュー (画像) を実際の UITableViewCell よりも大きくする必要があるため、その兄弟を部分的にオーバーラップさせる必要があるという設計から作業しています。

そこで、テーブル セルを設定し、画像を生成してセルの contentView に追加しました。

// rowHeight for the UITableView is 45.0f

UIImage *image = [self createCellThumbnail: someImage];
UIImageView *thumbView = [[UIImageView alloc] initWithFrame: CGRectMake(150, -5, 55,55)];
thumbView.transform = CGAffineTransformMakeRotation(0.1f);
thumbView.image = image;

cell.clipsToBounds = NO;
cell.contentView.clipsToBounds = NO;

[cell.contentView addSubview: thumbView];

画像はその下のセルに「オーバーフロー」しますが、ここに示すように、画像の上部は常に切り取られます。

画像

私がやろうとしていることが現在のアプローチで可能かどうか誰かが知っていますか?

または、すべてのセルが描画された後にこれらの画像を UITableView に描画する方法を考え出す必要があります(スクロールできないテーブルビューなので、うまくいき、かなり簡単です)。

アップデート:

また、次のものを追加しようとしましたが、役に立ちませんでした:

cell.opaque = NO;
cell.contentView.opaque = NO;

cell.clearsContextBeforeDrawing = NO;
cell.contentView.clearsContextBeforeDrawing = NO;

cell.clipsToBounds = NO;    
cell.contentView.clipsToBounds = NO;
4

4 に答える 4

15

tableView はセルを下から上にレンダリングするように見えるため、1 つのセルの上のセルがその 1 つのセルと重なっています。これを回避するにはbackgroundColor、すべてのセルをに設定して、オーバーラップの問題が発生+[UIColor clearColor]しないようにする必要があります。

しかし、backgroundColorを clear in に設定し-tableView:cellForRowAtIndexPath:ても意味がありません。UIKit は、セルが描画される前にセルに対して多くの処理を行うためbackgroundColor、セルのプロパティをリセットします。

backgroundColor必要なことは、 を後の状態に設定することです。幸いなことに-[UITableViewDelegate tableView:willDisplayCell:forRowAtIndexPath:]、次のように実装できるものがあります。

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
    cell.backgroundColor = [UIColor clearColor];
}

現在backgroundColor、セルが描画される直前に を設定しており、これが機能していることが判明しました。

于 2010-05-16T09:35:42.497 に答える
2

この問題が発生し、カスタムテーブルビューセルのメインバックグラウンドでクリップサブビューがチェックされていることを確認し、問題を解決しました。ただし、これはxibからロードされたカスタムテーブルビューセルを使用したものです。まったく同じではありませんが、似たような状況です。

于 2012-09-08T09:15:13.517 に答える
1

昨日、実際には反対のことがありました。カスタムテーブルセルを作成しましたが、何らかの理由で、必要のないオーバーフローが発生しました。私の解決策は、ビュー コントローラー クラスに次のコードを追加することでした。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{  
    return 175;
}

表のセルの高さと一致した場合、重なりはありませんでした。小さすぎると重なりがありました。ただし、私は非常に迅速に行動したので、これを行うのが非常に良い考えであるかどうかはわかりません。

于 2010-05-16T08:26:51.897 に答える