防止UITableviewcell在重新排序期间变得透明

时间:2011-02-27 09:58:41

标签: uitableview transparent

我试图在重新排序动画期间保持我的uitableviewcells不透明 - 原因是我在一个视图中自定义绘制单元格以增强滚动性能,但这样做会显着减慢重新排序动画。

知道如何实现这个目标吗?

6 个答案:

答案 0 :(得分:8)

有关表格处于拖动模式时所发生情况的精彩描述,请参阅this answer

我在iOS 7上有一个UITableViewStyleGrouped。为了获得所需的效果(非透明,白色背景),我必须遵循Aaron's建议和bmovement's

@interface ABCCell : UITableViewCell

@end

@implementation ABCCell

- (id)initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.backgroundView = [UIView new];
        self.backgroundView.backgroundColor = [UIColor whiteColor];
    }
    return self;
}

- (void)setAlpha:(CGFloat)alpha {
    [super setAlpha:1.0];
}

@end

不执行任何操作会导致视图具有100%透明背景。

仅设置背景视图会使单元格具有80%透明的白色背景。

仅设置alpha会导致单元格具有黑色背景(0%透明)。

实现两者,为您提供白色背景(0%透明)。

答案 1 :(得分:2)

出于某种原因,重新排序动画开始时我的UITableViewCell子类的drawRect没有被调用,但是将它添加到我的子类中对我有用:

- (void)setAlpha:(CGFloat)alpha {
    [super setAlpha:1.0f];
}

答案 2 :(得分:2)

这是一个老问题,但是iOS 7上样式为UITableViewStyleGrouped的表格视图中的单元格会再出现此问题。默认情况下,这些单元格应该具有非零背景视图,但在iOS 7中会盯着背景视图未设置或未给出不透明背景。为了防止细胞在重新排序期间变得透明,可以在细胞类的initWithStyle:reuseIdentifier:方法(或细胞初始化周围的其他地方)中添加这样的代码。这里self就是细胞本身。

self.backgroundView = [[UIView alloc] initWithFrame:CGRectZero];
self.backgroundView.backgroundColor = [UIColor whiteColor]; // Or whatever color.

答案 3 :(得分:1)

这是Swift的解决方案。

class StopMakingMeTransparentCell: UITableViewCell {
    override var alpha: CGFloat {
        didSet {
            super.alpha = 1
        }
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        self.backgroundView = UIView()
        self.backgroundView!.backgroundColor = UIColor.whiteColor()
    }
}

答案 4 :(得分:0)

这个问题的最新答案,在Swift 3中:



        let fakeBgColorImageView = UIImageView(image:UIImage(color:UIColor.blue))
        addSubview(fakeBgColorImageView)
        // Autolayout with PureLayout, use whatever you want here
        fakeBgColorImageView.autoPinEdgesToSuperviewEdges()
        sendSubview(toBack: fakeBgColorImageView)




  1. 将此代码添加到自定义单元格的初始化程序
  2. 添加带有颜色的假UIImageView作为单元格的背景(不是内容视图!,因为它将被调整大小并赢得&#t覆盖重新排序控件,而不是( - )删除图标)
  3. 将视图发送到后面,因此它位于contentView
  4. 后面

答案 5 :(得分:-1)

我对这个问题XD感到愚蠢

我刚才发现在我的drawrect函数中,我可以覆盖alpha值。所以,在绘制开始时,我只设置self.alpha = 1.0f,并且我的单元格在所有模式下都是不透明的,包括在重新排序的中间。