4

背景を少し透明に変更するまで、テーブルは問題ないと思っていました。これにより、新しいデキューされたセルの下に以前のセルが表示されました。これは私のtableView:cellForRowAtIndexPath:メソッドのコードです。冗長なラベルの設定を取り出しましたが、これはすべて と同じtimeLabelです。

static NSString* cellIdentifer = @"Cell";

UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier: cellIdentifer];

if (!cell)
{
    cell= [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: cellIdentifer];
}

int offset = 5;
int rowHeight = 120;
UIView* cellView = [[UIView alloc] initWithFrame: CGRectMake(offset, offset, 320 - offset * 2, rowHeight - offset * 2)];

cellView.backgroundColor = indexPath.row % 2 == 0 ? [UIColor colorWithWhite: 1.0 alpha: .8 ] : [UIColor colorWithWhite: .3 alpha: .8];

int padding = 5;

int x1 = 5;
int x2 = CGRectGetWidth(cellView.frame) / 3;
int x3 = x2 * 2;

int y1 = 5;
int y2 = CGRectGetHeight(cellView.frame) / 2 + padding;

int width = CGRectGetWidth(cellView.frame) / 3 - padding;
int sHeight = CGRectGetHeight(cellView.frame) / 2 - padding;
int bHeight = CGRectGetHeight(cellView.frame) - padding;

CGRect cell1 = CGRectMake(x1, y1, width, sHeight);

int row = indexPath.row;// - 1;

UILabel* timeLabel = [[UILabel alloc] initWithFrame: cell1];
timeLabel.backgroundColor = [UIColor clearColor];
timeLabel.text = [[self.tableData objectAtIndex: row] objectForKey: @"time"];
[cellView addSubview: timeLabel];


[cell.contentView addSubview: cellView];

ここに何が起こっているかのスクリーンショットがあります

4

2 に答える 2

0

主な問題はcell=[[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: cellIdentifer];メソッドにあるため、何も変更したくない場合は、次のようなメソッドを使用してくださいUITableViewCell *cell= [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleSubtitle reuseIdentifier: nil];

これは良い方法ではありませんが、これを使用できます。この場合、セルは再利用されないためです。より良い解決策の1つは、選択したカスタムセルを作成して使用することです。

于 2013-02-08T15:37:28.107 に答える