微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的 UIViewController 中的导航项与子视图和标签重叠

如何解决我的 UIViewController 中的导航项与子视图和标签重叠

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

    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,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,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,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()
    }

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

Chats screen

当我第一次选择聊天时,我得到了类似的信息

First chat opened

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

Second chat opened

解决方法

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

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

第二个是 go storyboard 并将一个新的 navigationController 嵌入到您的子视图控制器(您的功能所在)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?