我试图在重新排序动画期间保持我的uitableviewcells不透明 - 原因是我在一个视图中自定义绘制单元格以增强滚动性能,但这样做会显着减慢重新排序动画。
知道如何实现这个目标吗?
答案 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)

答案 5 :(得分:-1)
我对这个问题XD感到愚蠢
我刚才发现在我的drawrect函数中,我可以覆盖alpha值。所以,在绘制开始时,我只设置self.alpha = 1.0f,并且我的单元格在所有模式下都是不透明的,包括在重新排序的中间。