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.
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.