【问题标题】:iOS 11 back button issueiOS 11 后退按钮问题
【发布时间】:2023-04-05 08:10:01
【问题描述】:
if #available(iOS 11, *) {

    let view = UIView()
    view.frame = CGRect(x: 20, y: 0, width: 70, height: 50)
    let btn: UIButton = UIButton(frame: CGRect(x:-14, y: 0, width: 30, height: 27))
    btn.setBackgroundImage(UIImage(named: "BackArrow"), for: UIControlState());
    btn.addTarget(self, action: #selector(ExampleController.barBtnBackAction), for: UIControlEvents.touchUpInside)
    btn.center = CGPoint(x: btn.center.x,y :view.center.y)
    let tap = UITapGestureRecognizer(target: self, action: #selector(ExampleController.barBtnBackAction))
    view.addGestureRecognizer(tap)
    view.isUserInteractionEnabled = true
    view.backgroundColor = UIColor.black
    view.addSubview(btn)
    let leftButtonItem = UIBarButtonItem(customView: view)
    self.navigationItem.leftBarButtonItem = leftButtonItem
}

我正在使用此代码在 iOS 11 的导航栏中设置后退按钮,但效果不佳?用户在点击后退按钮时遇到问题我无法使用默认值,因为我想要对其进行自定义操作,并且在 iOS 11 之前我正在使用此代码:-(以下为 iOS 10)它工作正常。

let  barBtnNeg = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.fixedSpace, target: self, action: nil)
barBtnNeg.width = -15.0
let btn: UIButton = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 27))
btn.setBackgroundImage(UIImage(named: "BackArrow"), for: UIControlState());
btn.addTarget(self, action: #selector(ExampleController.btnBackAction), for: UIControlEvents.touchUpInside)
let barBtnBack = UIBarButtonItem(customView: btn)
self.navigationItem.leftBarButtonItems = [barBtnNeg, barBtnBack]

如果我使用此代码,后箭头图像会向右移动(对齐错误),如果我减小帧静止图像的 x 轴,则不会移动,所以我必须使用上面的代码(如果 #available(iOS 11 , *))。

那么有什么解决方案可以通过自定义图像、自定义选择器(操作)和自定义对齐来解决后退按钮问题(导航栏)?

【问题讨论】:

    标签: ios iphone swift uinavigationcontroller ios11


    【解决方案1】:

    为导航控制器添加此类

    class NavigationBar: UINavigationBar {
    
        override func layoutSubviews() {
            super.layoutSubviews()
    
            for subview in self.subviews {
                let stringFromClass = NSStringFromClass(subview.classForCoder)
    
                if stringFromClass.contains("BarBackground") {
                    subview.frame.origin.y = -20
                    subview.frame.size.height = 64
                }
            }
        }
    }
    

    在你需要的地方创建导航栏

    let navigationBar = NavigationBar(frame: CGRect(origin: CGPoint(x: 0,
                                                                            y: 20),
                                                            size: CGSize(width: view.frame.width,
                                                                         height: 40)))
            navigationBar.backgroundColor = UIColor(red: 46.0/255.0, green: 135.0/255.0, blue: 245.0/255.0, alpha: 1.0)
            navigationBar.isTranslucent = false
            let button1 = UIButton()
            button1.setImage(UIImage(named: "Back"), for: UIControlState())
            button1.addTarget(self, action: #selector (goBack(_:)), for: UIControlEvents.touchUpInside)
            button1.frame = CGRect(x: 0, y: 5, width: 20, height: 20)
            let barButton1 = UIBarButtonItem(customView: button1)
            self.navigationItem.leftBarButtonItem = barButton1
            navigationBar.items = [navigationItem]
            self.view .addSubview(navigationBar)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 2011-11-12
      • 2011-01-15
      • 2010-09-06
      相关资源
      最近更新 更多