如何解决我的 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()
}
解决方法
您的根视图控制器和子视图控制器具有相同的导航控制器,因此每次调用 fixNavBar
时,都会有一些视图附加在前一个 .
第一个选项是在函数顶部添加 nav?.subviews.forEach({$0.removeFromSuperview()})
,如@Raja 的评论。
第二个是 go storyboard 并将一个新的 navigationController 嵌入到您的子视图控制器(您的功能所在)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。