Предотвращение прозрачности UITableviewcell во время переупорядочения
Я стараюсь, чтобы мои uitableviewcells были непрозрачными во время переупорядочения анимации, потому что я делаю пользовательский чертеж ячейки в одном представлении, чтобы повысить производительность прокрутки, но это значительно замедляет анимацию переупорядочения.
Любая идея, как достичь этого?
Ответы
Ответ 1
Я чувствую себя глупым, чтобы задать этот вопрос XD
Я только что понял, что в моей функции drawrect я могу переопределить значение альфа. поэтому в начале розыгрыша я просто установил self.alpha = 1.0f, и вуаля мои клетки непрозрачны во всех режимах, в том числе в середине переупорядочения.
Ответ 2
Для отличного описания того, что происходит, когда таблица находится в режиме перетаскивания, см. этот ответ.
У меня была UITableViewStyleGrouped на iOS 7. Чтобы получить желаемый эффект (непрозрачный, белый фон), мне пришлось следовать предложению Aaron и bmovement,.
@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%.
Установка только альфа приводит к тому, что ячейка имеет черный фон (0% прозрачный).
Реализация обоих, дает вам белый фон (0% прозрачный).
Ответ 3
По какой-то причине мой подкласс UITableViewCell
drawRect не вызывался при начале анимации переупорядочения, но добавление этого в мой подкласс работало для меня:
- (void)setAlpha:(CGFloat)alpha {
[super setAlpha:1.0f];
}
Ответ 4
Это старый вопрос, но эта проблема может возникнуть снова для ячеек в табличных представлениях со стилем UITableViewStyleGrouped
на iOS 7. Эти ячейки должны иметь не-нулевой фоновый вид по умолчанию, но, глядя в iOS 7, фон view не задан или не задан непрозрачный фон. Чтобы предотвратить прозрачность ячеек во время переупорядочения, добавьте такой код в метод класса ячейки initWithStyle:reuseIdentifier:
(или где-то еще вокруг инициализации ячеек). Здесь self
- сама ячейка.
self.backgroundView = [[UIView alloc] initWithFrame:CGRectZero];
self.backgroundView.backgroundColor = [UIColor whiteColor]; // Or whatever color.
Ответ 5
Здесь решение для 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()
}
}
Ответ 6
Самый последний ответ для этой проблемы в 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)