That isn’t a easy rectangle. That’s truly a menu to point out the navigation stack. It is going to have extra buttons should you navigate deeper. This cannot be eliminate with regular APIs however you will get round it wit some swizzling:
- Implement this:
personal func swizzle(
targetClass: AnyClass,
originalSelector: Selector,
swizzledSelector: Selector
) {
let originalMethod = class_getInstanceMethod(targetClass, originalSelector)
let swizzledMethod = class_getInstanceMethod(targetClass, swizzledSelector)
method_exchangeImplementations(originalMethod!, swizzledMethod!)
}
extension UIViewController {
static let classInit: Void = {
let originalSelector = #selector(viewWillAppear(_:))
let swizzledSelector = #selector(swizzledViewWillAppear(_:))
swizzle(
targetClass: UIViewController.self,
originalSelector: originalSelector,
swizzledSelector: swizzledSelector
)
}()
@objc func swizzledViewWillAppear(_ animated: Bool) {
if #out there(iOS 14.0, *) {
let backButton = BackBarButtonItem(title: "", type: .plain, goal: nil, motion: nil)
navigationItem.backBarButtonItem = backButton
}
swizzledViewWillAppear(animated)
}
}
class BackBarButtonItem: UIBarButtonItem {
@out there(iOS 14.0, *)
override var menu: UIMenu? {
get { tremendous.menu }
set { }
}
}
- Name
UIViewController.classInit
some the place early (just like the init of a view):
struct SomeView: View {
init() {
UIViewController.classInit
}
,,,
}
💡 Maintain the menu with a workaround
As a substitute of above technique, you may set the right navigation title title onDisappear
to make it work as anticipated:
struct NavigationTesting: View {
@State var title: LocalizedStringKey = " "
var physique: some View {
NavigationStack {
NavigationLink("Subsequent") {
Textual content("View 2")
}
.navigationTitle(title)
.onDisappear { title = "Web page 1" }
.onAppear { title = " " }
}
}
}
This fashion you may populate the menu with the right title and conserving the “again” title hidden as meant.