CAGradientLayer не работает на iOS 7 (но работает на iOS 6)

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

// add a layer that overlays the cell adding a subtle gradient effect CAGradientLayer* gradientLayer = [CAGradientLayer layer]; NSLog(@"%@",NSStringFromCGRect(cell.bounds)); gradientLayer.frame = cell.bounds; gradientLayer.colors = @[(id)[[UIColor colorWithWhite:1.0f alpha:0.2f] CGColor], (id)[[UIColor colorWithWhite:1.0f alpha:0.1f] CGColor], (id)[[UIColor clearColor] CGColor], (id)[[UIColor colorWithWhite:0.0f alpha:0.1f] CGColor]]; gradientLayer.locations = @[@0.00f, @0.01f, @0.95f, @1.00f]; [cell.layer insertSublayer:gradientLayer atIndex:0]; 

После запуска кода я вижу, что CAGradientLayer был добавлен в мой cell.layer. Но я не вижу его вообще, когда запускаю приложение на своем iOS 7 Simulator.

 <CALayer:0xaca1980; sublayers = (<CAGradientLayer: 0xaad2110>, <CALayer: 0xaca2a70>); 

Код работает на iOS 6 без каких-либо проблем.

Если CAGradientLayer больше не работает на iOS 7, что я могу сделать, чтобы добавить градиенты в ячейку таблицы?

Заранее спасибо.

4 Solutions collect form web for “CAGradientLayer не работает на iOS 7 (но работает на iOS 6)”

Я исправил это, установив цвет фона ячейки. В этом случае вы могли бы поддерживать индекс как 0, поэтому элементы отображаются, а также отображается градиент.

 cell.backgroundColor = [UIColor clearcolor]; [cell.layer insertSublayer:gradientLayer atIndex:0]; 

Согласно моему комментарию выше, мне немного туманно, почему это работает. Кажется, что после нескольких тестов на iOS6 у меня есть 2 подслоя, где для iOS7 у меня 1. Что это связано с введением индексов вне меня. Я не понимаю, почему установка градиента в индекс 1 работает … doh! 🙂

Но для моих нужд я требовал, чтобы градиент появлялся над всем остальным, поэтому вместо того, чтобы использовать ответ выше с проверками ОС (который отлично работает BTW !!), я сделал что-то вроде:

 [self.layer insertSublayer:_gradientLayer above:[self.layer.sublayers firstObject]]; 

Я исправил эту проблему, изменив

 [cell.layer insertSublayer:gradientLayer atIndex:0]; 

в

 [cell.layer insertSublayer:gradientLayer atIndex:1]; 

Для обратной совместимости. Я использую код, подобный этому

  if ([Common isiOS7]) { [self.layer insertSublayer:_gradientLayer atIndex:1]; } else { [self.layer insertSublayer:_gradientLayer atIndex:0]; } 

Обновление апреля 2016 года

Поэтому я наткнулся на этот вопрос, поскольку у меня возникла аналогичная проблема. Для меня следующий чудесным образом сделал трюк:

вместо использования gradient.colors = @[*colors*] , мне пришлось использовать gradient.colors = [NSArray arrayWithObjects: *colors*, nil]

Может быть ошибка Apple, или что-то, чего я не понимаю. Надеюсь, это поможет кому угодно!

  • Звук не воспроизводится в push-уведомлениях
  • Может ли UIStackView поддерживать iOS 8 или 7?
  • Проблема с заголовком заголовка UICollectionView
  • Как использовать UIViewControllerAnimatedTransitioning с UINavigationController?
  • Задержка состояния подсветки кнопки
  • Как получить информацию о переносе слов с помощью новых API iOS 7?
  • Сбой на iOS 7:
  • Сделать звуковой вызов FaceTime из моего приложения
  • Как последовательно останавливать AVAudioSession после AVSpeechUtterance
  • Вопрос iOS7 с текстовым дополнением к заполнителю UISearchBar
  • автоматическиAdjustsScrollViewInsets не работает
  • Interesting Posts

    Пространство между пользовательскими UITabBar и ViewController

    In-App Purchase – Доступные продукты не имеют localizedTitle, localizedDescription

    Отрежьте отверстие в UIView

    Swift – вызов файлов C ++ с использованием обертки Objective-C – передача значений Int

    Класс не имеет инициализаторов: Swift Error

    Программно чтение файла приложения iOS app.

    Проблемы с добавлением UITableView внутри UIViewController в Swift

    О «Декларации действует только в области файлов»

    Изображение миниатюры iOS CoreSpotlight из URL-адреса

    iOS NSURLConnection _resourceLoadLoop crash

    Сохранить имя пользователя-пароль с помощью NSUserDefault, как и насколько безопасно?

    Ошибки SDK для Facebook iOS – публикация открытых графических действий

    Настройка настраиваемого цвета текста строки состояния

    Могу ли я получить базовое объяснение CATransform3DIdentity?

    Как изменить ярлык «Отмена» от модального сегмента в Apple Watch

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.