【问题标题】:Navigation item in my UIViewController is overlapping child views and labels我的 UIViewController 中的导航项与子视图和标签重叠
【发布时间】:2021-09-13 11:19:46
【问题描述】:

我正在向我的应用程序添加自定义导航项。但是每次我导航导航项的项目时都会重叠。我的代码是

    func fixNavBar(){
        self.navigationItem.setHidesBackButton(true, animated: true)
        let nav = self.navigationController?.navigationBar
        let navView = UIView(frame: CGRect(x: 0, y: 0, width: (nav?.frame.width)!, height: (nav?.frame.height)!))
        let backButton = UIButton(frame: CGRect(x: 0, y: 0, width: navView.frame.height, height: navView.frame.height))
        backButton.imageView?.contentMode = .scaleToFill
        backButton.setImage(UIImage(systemName: "chevron.left"), for: .normal)
        backButton.setTitleColor(UIColor(rgb: 0x23C0FF), for: .normal)
        backButton.tintColor = UIColor(rgb: 0x23C0FF)
        nav?.addSubview(navView)
        backButton.addTarget(self, action: #selector(goBack), for: .touchUpInside)
        navView.backgroundColor = .clear
        let imageView = UIImageView(frame: CGRect(x: backButton.frame.width+5, y: 0, width: navView.frame.height-2, height: navView.frame.height-2))
        let profUrl = URL(string: "\(selectedUser.profilePictuer)")
        imageView.kf.setImage(with: profUrl)
        let userLbl = UILabel(frame: CGRect(x: backButton.frame.width + 15 + imageView.frame.width, y: 0, width: 150, height: navView.frame.height))
        userLbl.font = UIFont(name: UIFont.fontNames(forFamilyName: "Ubuntu")[0], size: 17)
        userLbl.text = selectedUser.fullName
        userLbl.textAlignment = .left
        userLbl.textColor = .black
        navView.addSubview(imageView)
        navView.addSubview(userLbl)
        navView.addSubview(backButton)
        imageView.layer.cornerRadius = imageView.frame.height/2
        imageView.layer.masksToBounds = true
    }

    @objc func goBack(sender: UIButton!) {
        self.navigationController!.popViewController(animated: true)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        fixNavBar()
    }

这是我选择要打开的任何聊天时的根视图控制器

当我第一次选择聊天时,我会得到类似的东西

以及选择第二个聊天时,它不会删除以前的用户名,但重叠它

【问题讨论】:

  • 您每次都在导航栏中添加子视图。我推荐你使用navigationbaritem。或者在 fixNavBar 函数的第一行添加这个nav?.subviews.forEach({$0.removeFromSuperview()})

标签: ios swift uinavigationcontroller uinavigationbar uinavigationitem


【解决方案1】:

您的根视图控制器和子视图控制器具有相同的导航控制器,因此当您每次调用 fixNavBar 时,都会在前一个视图上附加一些视图。

第一个选项是在你的函数顶部添加nav?.subviews.forEach({$0.removeFromSuperview()}),就像@Raja 的评论一样。

其次是去故事板并将一个新的navigationController嵌入到您的子视图控制器(您的函数所在的位置)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多