0

Disclaimer: I tried to use method swizzling suggested by another user, it's causing some glitches... Blockquote

with the release of iOS 14.x, users are able to hold the back button, to display a menu, this is enabled by default, I'm trying to remove it using appearance.. but it look likes there is no appearance option for it.

enum Runtime {
    static func swizzle() {
        if #available(iOS 14.0, *) {
            exchange(
                #selector(setter: UIBarButtonItem.menu),
                with: #selector(setter: UIBarButtonItem.swizzledMenu),
                in: UIBarButtonItem.self
            )
        }
    }
    
    private static func exchange(
        _ selector1: Selector,
        with selector2: Selector,
        in cls: AnyClass
    ) {
        guard
            let method = class_getInstanceMethod(
                cls,
                selector1
            ),
            let swizzled = class_getInstanceMethod(
                cls,
                selector2
            )
        else {
            return
        }
        method_exchangeImplementations(method, swizzled)
    }
}

@available(iOS 14.0, *)
private extension UIBarButtonItem {
    @objc dynamic var swizzledMenu: UIMenu? {
        get {
            nil
        }
        set {
            
        }
    }
}

back button menu

DeyaEldeen
  • 9,127
  • 9
  • 40
  • 74

0 Answers0