J'ai récemment commencé à travailler dans SwiftUI, je suis arrivé à la conclusion que travailler avec la navigation n'est pas encore vraiment génial. Ce que j'essaie de réaliser est le suivant. J'ai finalement réussi à me débarrasser de l'arrière-plan translucide sans faire planter l'application, mais maintenant je suis tombé sur le numéro suivant. Comment puis-je me débarrasser du texte "back" dans le navbaritem?
J'ai atteint la vue ci-dessus en définissant l'apparence par défaut dans le SceneDelegate.swift
fichier comme ceci.
let newNavAppearance = UINavigationBarAppearance()
newNavAppearance.configureWithTransparentBackground()
newNavAppearance.setBackIndicatorImage(UIImage(named: "backButton"), transitionMaskImage: UIImage(named: "backButton"))
newNavAppearance.titleTextAttributes = [
.font: UIFont(name: GTWalsheim.bold.name, size: 18)!,
.backgroundColor: UIColor.white
]
UINavigationBar.appearance().standardAppearance = newNavAppearance
Une façon possible d'y parvenir est de remplacer les éléments de la barre de navigation, mais cela a un inconvénient ( SwiftUI Custom Back Button Text for NavigationView ) comme le créateur de ce problème l'a déjà dit, le geste arrière cesse de fonctionner après avoir remplacé la barre de navigation. articles. Avec cela, je me demande également comment je pourrais définir la couleur de premier plan du bouton de retour. Il a maintenant la couleur bleue par défaut, mais j'aimerais l'écraser avec une autre couleur.
Je me suis donc retrouvé avec la solution suivante qui fonctionne réellement. J'écrase les éléments de la barre de navigation comme ça
.navigationBarItems(leading:
Image("backButton")
.foregroundColor(.blue)
.onTapGesture {
self.presentationMode.wrappedValue.dismiss()
}
)
Le seul problème avec cela était que le geste du dos ne fonctionnait pas, donc cela a été résolu en étendant le UINavigationController
extension UINavigationController: UIGestureRecognizerDelegate {
override open func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
public func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
return viewControllers.count > 1
}
}
Maintenant, il ressemble exactement à ce que je veux, la solution est un peu piratée ... mais cela fonctionne pour le moment, j'espère que SwiftUI mûrira un peu afin que cela puisse être fait plus facilement.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots