【问题标题】:Semi-Transparent UITableViewCells are not transparent until they have been scrolled off screen半透明 UITableViewCells 直到它们被滚动到屏幕外才透明
【发布时间】:2011-10-30 16:31:50
【问题描述】:

[已修复] 在尝试了很多不同的解决方案后,我终于找到了一个工作。我需要做的就是在 willDisplayCell 方法中将单元格背景颜色设置为清除:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

[cell setBackgroundColor:[UIColor clearColor]];

我的 UITableview 有一张背景图片(照片),表格视图中的单元格有一个半透明的背景。

当我第一次显示 UITableView 时,单元格没有显示为透明。但是,当我将一个单元格滚动出屏幕并将其滚动回具有半透明背景的单元格显示时。

有没有人知道为什么在单元格滚动到屏幕外之前它不能正确显示?见附图。第一个在加载后立即显示 tableview。第二张图片显示了将顶部的几个单元格从屏幕上滚动并重新打开后的样子。

下面是我用来设置单元格的代码。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellPhotoIdentifier = @"PhotoDescriptionCell";


      UITableViewCell *cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellPhotoIdentifier] autorelease];

    // Configure the cell...
    cell.textLabel.text = [NSString stringWithFormat:@"Photo description %i", indexPath.row];
    cell.textLabel.textColor = [UIColor whiteColor];
    cell.opaque = NO;
    cell.contentView.backgroundColor = [UIColor blackColor];
    cell.contentView.opaque = NO;
    cell.contentView.alpha = 0.7;
    cell.textLabel.backgroundColor = [UIColor clearColor]; 

    return cell;
}

我正在使用 XCode 4 和 IOS SDK 4.3

【问题讨论】:

  • 我之前尝试过,我尝试在 willDisplayCell 函数中设置透明度,但它仍然不起作用。但是我又试了一次,只是将单元格背景颜色设置为 [UIColor clearColor] 并且它现在可以工作了。

标签: iphone cocoa-touch uitableview


【解决方案1】:

在重新阅读@progrmr 提供链接的答案后,我再次尝试并设法让它工作。

我需要在 willDisplayCell 方法中设置要清除的单元格背景颜色

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 

[单元格 setBackgroundColor:[UIColor clearColor]];

【讨论】:

  • 感谢您,我尝试设置背景颜色并删除背景视图以及几乎所有内容,但这对我有用
【解决方案2】:

您可能会先加载单元格,然后在加载单元格后将它们设置为透明。然后,一旦您将它们从屏幕上滚动并重新打开,它们就会变得透明,因为您已强制使用正确的设置重新加载它们。

您可以通过更改 Interface Builder 中的单元格属性来修复此问题,以使单元格从一开始就透明,或者在配置单元格之后,您需要添加强制单元格重新加载自身的代码。让我试着找到它,因为我不知道。

这个问题应该可以帮助您弄清楚单元格重新加载:Reloading only one UITableViewCell on a UITableview

【讨论】:

  • @progrmr 让我回到我读过的帖子,在尝试了一些建议后,我设法解决了我的问题。我已编辑问题以包含修复程序。
  • @Craig Mellon:不要编辑你的问题,而是用你的解决方案发布答案​​并接受它,这样很明显问题不再开放。
  • 会的,我刚试过,但我必须等待 8 小时才能回答我自己的问题。感谢您的提醒,我会在 8 小时内回复:)
猜你喜欢
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多