Предотвращение прозрачности 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)