代码之家  ›  专栏  ›  技术社区  ›  leedex

设置viewdidload或navigationBar后如何设置一次视图?

  •  0
  • leedex  · 技术社区  · 6 年前

    我有一个viewController,它被导航控制器推到堆栈上。在这个viewController中,我有一个名为setupViews的函数,它将我的UI元素添加到视图中,并根据导航栏的底部锚定来锚定它们。

    例子:

    func setupViews() {
        view.addSubview(topBar)
        topBar.anchor(top: navigationController?.navigationBar.bottomAnchor, left: view.leftAnchor, bottom: nil, right: view.rightAnchor, paddingTop: 1, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 55)
    }
    

    我想在viewDidLoad()中调用setupViews(),但此时,navigationController的navigationBar尚未设置。因此,我在ViewDidDisplay中调用setupViews,这是不可取的,因为每次ViewController出现时视图都会重新加载。

    是否有一个函数可以在设置导航栏后调用SetupView,并且只运行一次?我想用didSet创建一个导航栏可选,并在其中调用SetupView,但我不确定这是否能解决这个问题。

    1 回复  |  直到 6 年前
        1
  •  0
  •   matt    6 年前

    我想在viewDidLoad()中调用setupViews(),但此时,navigationController的navigationBar尚未设置。因此,我在ViewDidDisplay中调用setupViews,这是不可取的,因为每次ViewController出现时视图都会重新加载。

    显然你能解决 那个 只需使用Bool实例属性就可以解决这个问题,这样您只需 第一 时间 viewDidAppear 被称为。但是我怀疑你的假设,你可能需要先在导航控制器的导航栏上定位一些东西。锚定在屋顶上 安全区 .就是为了这个。