Можно ли установить прозрачную навигационную панель без прозрачности? - PullRequest
0 голосов
/ 21 февраля 2020

Я пытаюсь создать панель навигации, которая начинает полностью прозрачной, и когда пользователи прокручивают 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)
        }
    }
...