Изменение высоты пользовательского UINavigationBar? (Используя Swift или SwiftUI) - PullRequest
1 голос
/ 12 июля 2020

Я хотел бы дать UINavigationBar высоту c, но я не совсем уверен, как это сделать. В настоящее время у меня есть модификатор представления UINavigationBar, как показано ниже:

struct NavigationBarModifier: ViewModifier {

var backgroundColor: UIColor?
var titleColor: UIColor?
var largeTitleColor: UIColor?
var tintColor: UIColor?

    init(backgroundColor: UIColor?, titleColor: UIColor?, largeTitleColor: UIColor?, tintColor: UIColor?) {
        self.backgroundColor = backgroundColor
        self.titleColor = titleColor
        self.largeTitleColor = largeTitleColor
        self.tintColor = tintColor
        let coloredAppearance = UINavigationBarAppearance()
        coloredAppearance.configureWithTransparentBackground()
        coloredAppearance.backgroundColor = .clear
        coloredAppearance.titleTextAttributes = [.foregroundColor: titleColor]
        coloredAppearance.largeTitleTextAttributes = [.foregroundColor: largeTitleColor]
    
        UINavigationBar.appearance().standardAppearance = coloredAppearance
        UINavigationBar.appearance().compactAppearance = coloredAppearance
        UINavigationBar.appearance().scrollEdgeAppearance = coloredAppearance
        UINavigationBar.appearance().tintColor = tintColor
    }

    func body(content: Content) -> some View {
        ZStack{
            content
            VStack {
                GeometryReader { geometry in
                    Color(self.backgroundColor ?? .clear)
                        .frame(height: geometry.safeAreaInsets.top)
                        .edgesIgnoringSafeArea(.top)
                    Spacer()
                }
            }
        }
    }
}

Я хотел бы иметь возможность установить высоту этой панели навигации, для которой я создал инициализатор, но я не совсем конечно как. Я пробовал использовать модификаторы UINavigationBar.appearance (), но они не работали

1 Ответ

0 голосов
/ 13 июля 2020

Насколько мне известно, изменить высоту панели навигации невозможно. Возможно, с помощью UIKit вы могли бы выполнять некоторые явные манипуляции с кадрами, но в целом я бы не советовал этого делать, потому что это может испортить макет ваших представлений. Что я обычно считаю полезным, так это удаление темной теневой линии под панелью навигации с помощью внешнего вида и размещение содержимого под панелью навигации, которое имеет, например, тот же цвет, что и панель навигации, тем самым создавая плавный переход от панели навигации. к виду под ним. Например:

struct MyView: View {

    init() {
        let navBarAppearance = UINavigationBarAppearance()
        navBarAppearance.shadowImage = UIImage()
        navBarAppearance.shadowColor = .clear
        navBarAppearance.backgroundColor = UIColor.red
        UINavigationBar.appearance().standardAppearance = navBarAppearance
        UINavigationBar.appearance().compactAppearance = navBarAppearance
        UINavigationBar.appearance().scrollEdgeAppearance = navBarAppearance
    }

    var body: some View {
        NavigationView {
            VStack {
                Rectangle().foregroundColor(Color(UIColor.red)).frame(height: 100)
                Spacer()
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...