Цвет оттенка UIRfreshControl не соответствует заданному цвету

Цвет обновления не соответствует цвету оттенка и выглядит иначе, я попытался изменить tintAdjustmentMode, но результат тот же.

Просто отметим, что цвет счетчика и текста должен быть 0x2C76BE.

tvc.refreshControl = [UIRefreshControl new];
tvc.refreshControl.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
tvc.refreshControl.tintColor = [UIColor colorWithHex:0x2C76BE];
tvc.refreshControl.attributedTitle = [[NSAttributedString alloc] initWithString:@"Pull to query spectrum again" attributes:@{NSForegroundColorAttributeName:[UIColor colorWithHex:0x2C76BE]}];

введите описание изображения здесь


person Peter Lapisu    schedule 23.09.2015    source источник
comment
0x2C76BE не выглядит как шестнадцатеричный цвет.   -  person BooRanger    schedule 23.09.2015
comment
все в порядке, это # ​​2C76BE = 0x2C76BE   -  person Peter Lapisu    schedule 23.09.2015
comment
Удачи с этим? Я испытываю ту же проблему :(   -  person Mihai Fratu    schedule 24.05.2016


Ответы (2)


У меня была аналогичная проблема с UIRfreshControl, который неправильно отображал цвет при загрузке представления, и я вызываю beginRefreshing(). Если пользователь потянет, чтобы обновить, элемент управления правильно отобразит указанный мной оттенок tintColor.

Во-первых, создайте подкласс элемента управления обновлением. Затем переопределите метод didMoveToWindow в подклассе. Следующий код находит анимированный элемент для создания счетчика и задает цвет его фона.

Этот код использует расширение UIView для возврата всех подвидов представления (я использовал ответ Джона Уиллиса из Swift: рекурсивный цикл по всем подпредставлениям, чтобы найти определенный класс и добавить его в массив).

class CustomRefreshControl: UIRefreshControl {

    override func didMoveToWindow() {
        super.didMoveToWindow()
        if let l = getNestedSubviews().first(where: { $0.layer is CAReplicatorLayer }), l.subviews.count > 0 {
            l.subviews[0].backgroundColor = UIColor.orange //getNestedSubviews method is an extension of UIView as referenced above
        }
}

У счетчика есть CAReplicatorLayer, представление которого содержит одно подпредставление. Это подпредставление представляет собой просто прямоугольник, реализующий графический элемент для счетчика. Это тот графический элемент, который вы раскрашиваете.

person slucas    schedule 08.04.2019

UIRfreshControl — это класс с ошибками. Я заметил, что размещение tvc.refreshControl.tintColor = [UIColor colorWithHex:0x2C76BE]; внутри блока анимации (даже нулевой продолжительности) даст ожидаемые результаты. Итак, я попробовал сделать этот отвратительный «хак»: dispatch_async(mainQueue, <#set tintColor#>);, и это также дало правильный результат. Также может существовать зависимость элемента управления обновлением от времени вызова -beginRefreshing или -endRefreshing.

Поскольку меня очень раздражала ошибка UIRefreshControl и ограничение возможности использования только в UITableViewController, я создал полностью настраиваемый собственный, который можно использовать с любым типом UIScrollView (UICollectionView, UITableView). Обратите внимание, что я создал это до того, как UICollectionViewFlowLayout поддерживал липкие заголовки, такие как tableView, поэтому мой элемент управления обновлением не работает должным образом, когда этот параметр включен. Не стесняйтесь представить исправление ;).

Вы можете найти его здесь https://github.com/Joride/JRTRefreshControl (если это подпадает под ' оговорка о бесстыдном подключении» Я удалю эту ссылку, но я думаю, что она имеет отношение к вопросу.

person Joride    schedule 29.08.2016
comment
У меня та же проблема, и я попробовал следующее dispatch_async(dispatch_get_main_queue(), ^(){ [[self refreshController] setTintColor:[UIColor colorFromHex:0xff8900]]; });, но цвет по-прежнему не горит. Метод -beginRefreshing вызывается не мной, а пользователем, который тянет таблицу вниз. Установка цвета оттенка в блоке анимации также не дает никакого эффекта. - person Sietse; 23.05.2018