Предотвратить прозрачность UITableviewcell во время переупорядочения - PullRequest
16 голосов
/ 27 февраля 2011

Я стараюсь, чтобы мои uitableviewcells были непрозрачными во время анимации переупорядочения - причина в том, что я делаю собственное рисование ячейки в одном представлении, чтобы повысить производительность прокрутки, но это значительно замедляет анимацию переупорядочения.Есть идеи как этого добиться?

Ответы [ 6 ]

9 голосов
/ 11 июля 2014

Отличное описание того, что происходит, когда таблица находится в режиме перетаскивания, см. в этом ответе .

У меня была UITableViewStyleGrouped на iOS 7. Чтобы получить желаемыйэффект (непрозрачный, белый фон), я должен был следовать предложению Аарона и 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%).

2 голосов
/ 07 февраля 2014

Это старый вопрос, но эта проблема может снова возникнуть для ячеек в табличных представлениях со стилем UITableViewStyleGrouped в iOS 7. По умолчанию эти ячейки должны иметь не ноль фона, но в iOS 7 фон должен быть фон view либо не установлен, либо не имеет непрозрачного фона. Чтобы предотвратить прозрачность ячеек во время переупорядочения, добавьте код, подобный этому, в метод initWithStyle:reuseIdentifier: класса ячеек (или где-то еще вокруг инициализации ячеек). Здесь self - это сама клетка.

self.backgroundView = [[UIView alloc] initWithFrame:CGRectZero];
self.backgroundView.backgroundColor = [UIColor whiteColor]; // Or whatever color.
2 голосов
/ 31 октября 2012

Почему-то drawRect моего UITableViewCell подкласса не вызывался, когда началась анимация переупорядочения, но добавление этого в мой подкласс сработало для меня:

- (void)setAlpha:(CGFloat)alpha {
    [super setAlpha:1.0f];
}
1 голос
/ 24 июня 2015

Вот решение для 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()
    }
}
0 голосов
/ 28 декабря 2016

Самый актуальный ответ на эту проблему в 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 с цветом в качестве фона ячейки (НЕ содержимогоview !, потому что он будет изменен и не будет покрывать элемент управления переупорядочением, а также (-) значок удаления)
  3. Отправьте представление назад, так что оно находится за contentView
0 голосов
/ 27 февраля 2011

Я чувствую себя глупо, задавая этот вопрос XD

Я только что понял, что в моей функции drawrect я могу переопределить альфа-значение. поэтому в начале розыгрыша я просто установил self.alpha = 1.0f, и вуаля мои ячейки непрозрачны во всех режимах, в том числе в середине переупорядочения.

...