动画时透明的UITableViewCell闪烁背景

时间:2013-12-08 21:31:42

标签: ios objective-c uitableview ios7

我有一个UIViewController的自定义背景颜色。最重要的是UITableView UITableViewCells半透明(白色,不透明度为0.5)。

我责备的问题和我正在撞墙的那个问题是在iOS 7中,当你有UITableViewCell半透明背景并试图删除/插入/移动时行(依赖于动画效果)整个UITableView及其单元格 闪烁 仅0.1秒,并将单元格背景设置为更透明的单元格。这非常烦人。

我唯一要做的就是设置self.view的背景颜色:

self.view.backgroundColor = [UIColor colorWithRed:0.4 green:0.5 blue:0.7 alpha:1];

并使用以下内容设置单元格的背景颜色:

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

这是一个显示问题的gif:

enter image description here

这是超级简单的项目:https://github.com/socksz/TransparentCellFlashing

请帮我解决这个荒谬的问题! :P

1 个答案:

答案 0 :(得分:11)

  1. 创建UITableViewCell的子类(如named:CustomCell),并覆盖CustomCell.m中的方法:

    - (id)initWithCoder:(NSCoder *)aDecoder{
        self = [super initWithCoder:aDecoder];
        if(self){
            // Initialization code
            [self setBackgroundColor:[UIColor clearColor]];
            UIView * bgView = [[UIView alloc] initWithFrame:self.frame];
            [bgView setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.5]];
            [self addSubview:bgView];
        }
        return self;
    }
    
  2. 删除MasterViewController.m中的willDisplayCell方法

    - (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
    {
        cell.backgroundColor = [UIColor colorWithWhite:1 alpha:0.5];
    }
    
  3. 更改MasterViewController.m中的cellForRowAtIndexPath方法

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
        [self configureCell:cell atIndexPath:indexPath];
        return cell;
    }
    
  4. 在故事板中更改单元格的类类型 enter image description here

  5. 试一试:D

    enter image description here