SwiftUI пустое пространство под панелью навигации - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть представление с навигационной панелью с большим заголовком и содержимым внутри. Я изменил цвет фона содержимого и цвет фона панели навигации.

 var body: some View {
       NavigationView {
            VStack {
               //content
            }.background(Color.green)
             .edgesIgnoringSafeArea(.bottom) //to fill the white space at the bottom
             .navigationBarTitle("Wallets")
       }
}
extension UINavigationController {
    override open func viewDidLoad() {
        super.viewDidLoad()

        let standartAppearance = UINavigationBarAppearance()       
        standartAppearance.backgroundColor = UIColor.green
        navigationBar.standardAppearance = standartAppearance
        navigationBar.scrollEdgeAppearance = standartAppearance
        navigationBar.compactAppearance = standartAppearance
    }
}

А теперь, если я перехожу к следующему представлению, используя NavigationLink, и у этого представления есть заголовок с режимом отображения .inline (другой размер NavigationBar), в момент перехода я вижу пустое пространство под первой панелью навигации. Я могу заполнить его, если я сделаю .edgesIgnoringSafeArea (.all) для моего VStack, но в этом случае весь мой контент переходит под NavigationBar. Как я могу закрасить пространство под NavigationBar для пользовательского цвета?

1 Ответ

1 голос
/ 04 апреля 2020

Похоже, это ошибка. Я не нашел нормального решения. Вот обходной путь:

Мы должны вычислить высоту NavigationBar и заполнить пространство позади нее.

var deviceHeight: CGFloat {
    UIScreen.main.bounds.height
}

  func calcPadding() -> CGFloat {
        var padding: CGFloat = 0.0
        switch self.deviceHeight {
        case 568.0: padding = 94.0 + 6.0
        case 667.0: padding = 96.0 + 10.0
        case 736.0: padding = 96.0 + 10.0
        case 812.0: padding = 106.0 + 10.0
        case 896.0: padding = 106.0 + 10.0
        default:
            padding = 106.0
        }

    return padding
}


var body: some View {
    NavigationView {
        VStack {
            VStack {
                 //content
            }
            .padding(.top, calcPadding())
            .background(Color.myBackground)
        }
        .background(Color.myBackground)
        .edgesIgnoringSafeArea(.all)
    }
}
...