【问题标题】:How to move back custom button in navigationController on swift 5如何在swift 5上移回navigationController中的自定义按钮
【发布时间】:2019-10-02 01:13:51
【问题描述】:

我在处理 UI 时遇到问题。我使用navigationController 来移动屏幕。

但我不想使用基本后退按钮,所以我隐藏了基本后退按钮,将导航栏添加到情节提要中,

并添加项目以制作后退按钮。但是,屏幕不会移动到前一个屏幕。我怎样才能进入上一个屏幕?

基本后退按钮 // 我现在隐藏它。

我想使用我制作的返回按钮。

后退按钮项目的后退命令。

    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)

        self.navigationController?.setNavigationBarHidden(true, animated: animated)
    }

    @IBAction func backButton(_ sender: UIBarButtonItem) {
        self.dismiss(animated: false, completion: nil) // Did not worked!
    }

另外,我想去掉导航标题的下划线。如何删除它?

【问题讨论】:

    标签: ios swift navigation uinavigationcontroller


    【解决方案1】:

    我在相同情况的项目中使用它:

    UIApplication.shared.keyWindow?.rootViewController?.dismiss(animated: false, completion: nil)
    

    这可以在 iOS 13 弃用 keyWindow 后使用:

    let keyW = UIApplication.shared.windows.filter {$0.isKeyWindow}.first
    keyW?.rootViewController?.dismiss(animated: false, completion: nil)
    

    这个也可以用:

    self.navigationController?.popViewController(animated: false)
    

    self.navigationController?.popToRootViewController(animated: false)
    

    关于按钮:

    为什么不通过在故事板中创建这个层次结构来使用导航按钮:

    然后只需将 btn 的图像更改为您的自定义图像(我使用 burger1.png),如下所示:

    【讨论】:

    • get 警告 'keyWindow' 在 iOS 13.0 中已弃用:不应用于支持多个场景的应用程序,因为它会在所有连接的场景中返回一个关键窗口 'keyWindow' 在 iOS 13.0 中已弃用:不应该用于支持多个场景的应用程序,因为它在所有连接的场景中返回一个关键窗口
    • 尝试移动后退按钮时出现问题。后退按钮隐藏在状态栏中,无法点击。如何将后退按钮的 Margin 值调整为状态栏的高度?
    • 这就是我们已经在使用的。但是,后退按钮位于状态栏的高度,这使得按钮难以按下。我想我们可以调整导航栏的 Margin 值,但我不知道怎么做。
    • 那么可能有别的东西干扰了按钮,你能显示你的故事板和故事板层次结构的屏幕截图吗?
    • 我的屏幕是全屏,而不是 SafeArea。如果是这样的话,那么我必须调整页眉的边距值。
    【解决方案2】:

    您可以使用以下代码自定义返回按钮

        let buttonView = UIView(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
    
    
    let buttonImageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 25, height: 25))
            buttonImageView.contentMode = .scaleAspectFit
            buttonImageView.image = UIImage(named: "back_button")
    
            let btnLogo = UIButton(frame: CGRect(x: 0, y: 0, width: 50, height: 50))
            btnLogo.setTitle("", for: .normal)
            btnLogo.backgroundColor = UIColor.clear
            btnLogo.layer.masksToBounds = true
            btnLogo.addTarget(self, action: #selector(backButton), for: .touchUpInside)
            buttonView.addSubview(buttonImageView)
            buttonView.addSubview(btnLogo)
    
            let barButton = UIBarButtonItem(customView: buttonView)
            self.navigationItem.leftBarButtonItem = barButton
    

    如果你使用导航栏,你应该使用 navigationController.popViewController 而不是dismiss方法

    【讨论】:

    • 尝试移动后退按钮时出现问题。后退按钮隐藏在状态栏中,无法点击。如何将后退按钮的 Margin 值调整为状态栏的高度?
    猜你喜欢
    • 1970-01-01
    • 2017-09-03
    • 2016-06-14
    • 1970-01-01
    • 2020-10-29
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多