SwiftUI NavigationBar высота - PullRequest
       60

SwiftUI NavigationBar высота

1 голос
/ 15 февраля 2020

Как узнать текущую высоту NavigationBar? В UIKit мы можем получить

navigationController?.navigationBar.frame.height

, но не можем найти ничего для SwiftUI ...

1 Ответ

1 голос
/ 17 февраля 2020

Основано на этом посте (спасибо Asperi ): { ссылка }

struct NavBarAccessor: UIViewControllerRepresentable {
    var callback: (UINavigationBar) -> Void
    private let proxyController = ViewController()

    func makeUIViewController(context: UIViewControllerRepresentableContext<NavBarAccessor>) ->
                              UIViewController {
        proxyController.callback = callback
        return proxyController
    }

    func updateUIViewController(_ uiViewController: UIViewController, context: UIViewControllerRepresentableContext<NavBarAccessor>) {
    }

    typealias UIViewControllerType = UIViewController

    private class ViewController: UIViewController {
        var callback: (UINavigationBar) -> Void = { _ in }

        override func viewWillAppear(_ animated: Bool) {
            super.viewWillAppear(animated)
            if let navBar = self.navigationController {
                self.callback(navBar.navigationBar)
            }
        }
    }
}

И тогда мы можем вызвать это из любого представления:

.background(NavBarAccessor { navBar in
      print(">> NavBar height: \(navBar.bounds.height)")
                // !! use as needed, in calculations, @State, etc.
 })
...