Как изменить атрибуты текста для заголовка панели навигации в SwiftUI?
В последнее время я играю с новым фреймворком SwiftUI.
У меня есть базовое понимание того, как работает фреймворк, но я не могу найти способ изменить атрибуты заголовка для панели навигации.
Я использую последнюю версию Xcode 11 beta 5 и соответствующую версию swift/swiftUI
Я уже попробовал несколько вещей. Первым делом я попытался просто добавить модификаторы в текст, но каким-то образом SwiftUI, похоже, игнорирует модификаторы в среде панели навигации.
Во-вторых, я попытался изменить атрибуты заголовка через UINavigationBar.apperance().titleTextAttributes = ...
но похоже, что они удалили возможность настраивать titleTextAttributes UINavigationBar в последней бета-версии.
//First thing:
List(myData) {
...
}
.navigationBarTitle(Text("My title").font(myFont))
// Second thing
UINavigationBar.appearance().titleTextAttributes = myAttrs
Я ожидаю, что заголовок панели навигации будет иметь мой собственный шрифт, но это всегда шрифт Apple по умолчанию.
2 ответа
В SwiftUI на данный момент мы не можем изменить navigationBarTitle
шрифт, но вы можете изменить внешний вид навигационной панели следующим образом:
struct YourView: View {
init() {
//Use this if NavigationBarTitle is with Large Font
UINavigationBar.appearance().largeTitleTextAttributes = [.font : UIFont(name: "Georgia-Bold", size: 20)!]
//Use this if NavigationBarTitle is with displayMode = .inline
//UINavigationBar.appearance().titleTextAttributes = [.font : UIFont(name: "Georgia-Bold", size: 20)!]
}
var body: some View {
NavigationView {
Text("Hello World!")
.navigationBarTitle(Text("Dashboard").font(.subheadline), displayMode: .large)
//.navigationBarTitle (Text("Dashboard"), displayMode: .inline)
}
}
}
Я надеюсь, что это поможет вам. Спасибо!!
Я заставил это работать нормально.
Я храню его в структуре @main (iOS 14), которую я считаю чище, чем init() в представлении.
extension UINavigationController {
override open func viewDidLoad() {
super.viewDidLoad()
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.titleTextAttributes = [.foregroundColor: UIColor.white]
appearance.largeTitleTextAttributes = [.foregroundColor: UIColor .white]
appearance.largeTitleTextAttributes = [.font : UIFont(name: "OfficinaSans", size: 30)!]
appearance.titleTextAttributes = [ .font : UIFont(name: "OfficinaSans", size: 20)!]
appearance.shadowColor = .white
navigationBar.standardAppearance = appearance
navigationBar.compactAppearance = appearance
navigationBar.scrollEdgeAppearance = appearance
}
}