简体   繁体   English

将自定义视图添加到 NavigationBar 不起作用?

[英]Adding custom view into NavigationBar not working?

I am trying to add custom view to NavigationBar and result not working correct.我正在尝试将自定义视图添加到 NavigationBar 并且结果无法正常工作。

 public let statusBarHeight: CGFloat = {
    var heightToReturn: CGFloat = 0.0
         for window in UIApplication.shared.windows {
             if let height = window.windowScene?.statusBarManager?.statusBarFrame.height, height > heightToReturn {
                 heightToReturn = height
             }
         }
    return heightToReturn
}()

 override func viewDidLoad() {
        super.viewDidLoad()
//        self.navigationController?.navigationBar.isHidden = true
        // Do any additional setup after loading the view.
       let barView = UIView(frame: CGRect.zero)
        barView.backgroundColor = .purple
        barView.translatesAutoresizingMaskIntoConstraints = false
        
        if let navBarSize = self.navigationController?.navigationBar.frame.size {
//            barView.frame.size = CGSize(width: navBarSize.width, height: navBarSize.height + statusBarHeight)
            self.navigationController?.navigationBar.subviews.first?.insertSubview(barView, at: 0)
            NSLayoutConstraint.activate([
                barView.leadingAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.leadingAnchor)!),
                barView.trailingAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.trailingAnchor)!),
                barView.heightAnchor.constraint(equalToConstant: navBarSize.height + statusBarHeight )
            ])
        }

        
       
    }

See the difference in notch device this:查看缺口设备的区别:

图片

I have to make a change in your code, now it's work on all devices even iPhone 12 mini as shown in the image.我必须更改您的代码,现在它适用于所有设备,甚至 iPhone 12 mini,如图所示。 check image检查图像

override func viewDidLoad() {
        super.viewDidLoad()
        let barView = UIView(frame: CGRect.zero)
        barView.backgroundColor = .purple
        barView.translatesAutoresizingMaskIntoConstraints = false
        if (self.navigationController?.navigationBar.frame.size) != nil {
            self.navigationController?.navigationBar.subviews.first?.insertSubview(barView, at: 0)
            NSLayoutConstraint.activate([
                barView.leadingAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.leadingAnchor)!),
                barView.trailingAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.trailingAnchor)!),
                barView.topAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.topAnchor)!),
                barView.bottomAnchor.constraint(equalTo: (self.navigationController?.navigationBar.subviews.first!.bottomAnchor)!),
            ])
        }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM