tvOS UIImageView Focus Shadow Clipped

У меня есть UICollectionViewCell в UICollectionView, содержащий два компонента

  • 1 х UIImageView
  • 1 х UIView

В идеале UIView должен содержать пару меток, и по умолчанию установлены следующие свойства:

  • backgroundColor = .clear
  • isHidden = true

UICollectionView имеет clipsToBounds установлен в false,

в delegate UICollectionView, я использую didUpdateFocusIn функция, чтобы определить, какая ячейка получит фокус дальше, и отменить скрытие UIView.

Поскольку UIImageView имеет adjustsImageWhenAncestorFocused установлен в true, есть тень, нарисованная tvOS, когда она автоматически применяет эффект zoom + parallex.

Как можно видеть на двух картинках ниже (вторая картина имеет UIView's backgroundColor установлен в .black для ясности) тень обрезается пустым пространством, принадлежащим UIView в ячейке рядом с ним, даже если UIView уже скрыт.

Есть ли способ, которым я могу решить это?

Изменить: добавили третье изображение, которое показывает, что тень ведет себя идеально, когда UIView полностью удален из.xib.

UIView с * clear * backgroundColor

UIView с * черным * backgroundColor

UICollectionViewCell без UIView

2 ответа

Что ж, получается, что я неуклюжий дурак.

Я забыл, что я установил нижнее ограничение UIImageView быть привязанным к вершине UIView, который был ниже его.

Чистый результат сокрытия UIView вызвало UIImageView искать дно UICollectionViewCellи это вызвало проблемы с отсечкой.

Я теперь ограничил UIImageView на фиксированную высоту, и проблема была решена!

Начиная с tvOS 11, нет необходимости связывать ваши ограничения вида с ограничениями UIImageView, чтобы получить этот эффект.

Вы можете получить этот эффект, используя новое свойство overlayContentView UIImageView.

Ссылка на документацию:

https://developer.apple.com/documentation/uikit/uiimageview/2882128-overlaycontentview

Более подробное объяснение можно найти с минуты 15:00 следующего видео WWDC:

https://developer.apple.com/videos/play/wwdc2017/209/

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

https://github.com/PGSSoft/ParallaxView

Другие вопросы по тегам