在 viewwillappear 中添加自定义导航栏会使导航变慢?

Posted

技术标签:

【中文标题】在 viewwillappear 中添加自定义导航栏会使导航变慢?【英文标题】:adding custom navigation bar in viewwillappear makes navigation slow? 【发布时间】:2016-11-24 14:25:13 【问题描述】:

我创建了一个自定义导航栏。现在我将其添加到viewwillappear 方法中。因此,当我返回视图控制器时,加载需要时间。

  func addViewToNav()
  
    myView = UIView(frame: CGRect(x: 0, y: 20, width: (self.navigationController?.navigationBar.frame.size.width)!-40, height: (self.navigationController?.navigationBar.frame.size.height)!))

    imageView.frame = CGRect(x: 5, y: (myView?.frame.size.height)!/2-14, width: 28, height: 28)
    let image = UIImage(named: "download")
    imageView.contentMode=UIViewContentMode.scaleAspectFill
    imageView.image=image
    imageView.layer.borderColor = UIColor.white.cgColor
    imageView.layer.cornerRadius = imageView.frame.size.width/2
    imageView.clipsToBounds = true
    imageView.backgroundColor=UIColor.yellow
    label = UILabel(frame: CGRect(x: imageView.frame.size.width+15, y: 0, width: 150, height:  (myView?.frame.size.height)!))
    label?.text="Label"
    label?.textColor=UIColor.white
    myView?.addSubview(imageView)
    myView?.addSubview(label!)
    self.navigationController?.view.addSubview(myView!)
    //add tap gesturte on imageview & label
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(_:)))
    myView?.isUserInteractionEnabled=true
    tapGesture.numberOfTapsRequired=1
    myView?.addGestureRecognizer(tapGesture)
  

请指导我如何使它快速,因为这非常慢。

【问题讨论】:

检查图片尺寸是否太大 【参考方案1】:

这需要时间,因为每次控制器出现在屏幕上viewWillAppear 都会被调用,并且每次创建自定义视图的代码都会执行,将其添加为子视图,然后添加手势识别器。

有两种方法可以减少处理时间:

    如果您想以编程方式执行此操作,请在 viewDidLoad 而不是 viewWillAppear 中添加创建和添加自定义导航栏的代码

    storyboard本身中添加自定义导航栏,并在控制器中为其创建出口连接。

【讨论】:

以上是关于在 viewwillappear 中添加自定义导航栏会使导航变慢?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI |如何覆盖 viewWillAppear 等生命周期方法

UIViewController 的视图未由 viewWillAppear() 调整大小 [重复]

iOS:默认后退按钮显示在自定义左侧导航按钮上

Tab Bar 子 viewWillAppear 不会触发,添加 NavigationController 会给出两个导航栏

何时在自定义 UIVIew 中添加 CAAnimation?

如何在导航栏中添加自定义视图?