Я пытаюсь создать панель навигации, которая начинает полностью прозрачной, и когда пользователи прокручивают scrollView, панель навигации будет постепенно менять свою альфа, чтобы перейти к альфе 1. Теперь я добилась того, что панель навигации теперь меняется с прозрачной непрозрачным, но содержимое под этой панелью навигации все еще не полностью покрыто, потому что для navbar установлено значение: isTranslucent = true .
ВОПРОС: Есть ли способ получить полностью прозрачную панель навигации с логическим значением isTranslucent равным false ?
Я создал расширение UINavigationBar и сделал так:
private func updateAlpha(_ alpha: CGFloat = 0.0) {
let color = (barColor ?? tintColor).withAlphaComponent(alpha)
setBackgroundImage(image(with: CGRect(x: 0, y: 0, width: 1, height: 1), color: color.withAlphaComponent(alpha)), for: .default)
}
public func attachToScrollView(_ scrollView: UIScrollView) {
self.scrollView = scrollView
self.shadowImage = UIImage()
self.tintColor = UIColor.white
self.backIndicatorImage = #imageLiteral(resourceName: "back_shadow")
self.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
scrollView.addObserver(self, forKeyPath: kContentOffset, options: .new, context: nil)
}
open override func observeValue(forKeyPath _: String?, of _: Any?, change _: [NSKeyValueChangeKey: Any]?, context _: UnsafeMutableRawPointer?) {
guard let scrollView = scrollView else { return }
let offsetY = scrollView.contentOffset.y
if offsetY > -distance {
let alpha = min(1, 1 - ((-distance + 90 - offsetY) / 64))
updateAlpha(alpha)
} else {
updateAlpha(0)
}
}