【问题标题】:ViewWillAppear not executing codeViewWillAppear 不执行代码
【发布时间】:2015-12-19 22:10:45
【问题描述】:

我的 ViewWillAppear 方法中有这段代码,它只是将一组标签移​​出屏幕:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    //Hide 1,3,5 RM labels
    oneRepMax.center.y += view.bounds.height
    threeRepMax.center.y += view.bounds.height
    fiveRepMax.center.y += view.bounds.height

}

所有 3 个标签都已正确链接到我的故事板文件。当我运行该项目时,什么也没有发生。

如果我将完全相同的代码复制到链接到按钮的方法中,它会按预期工作。

项目中没有其他任何东西,所以我很困惑为什么这不起作用。

我正在使用 Xcode 7 并遵循在 ViewWillAppearMethod 中工作的教程。 如下:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    heading.center.x -= view.bounds.width
    username.center.x -= view.bounds.width
    password.center.x -= view.bounds.width
    loginButton.center.y += 30
    loginButton.alpha = 0



}

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    在所有标签出现在屏幕上之前,您永远不知道界限。

    尝试在 viewDidAppear 方法中做同样的事情。

    来自文档:

    在视图的初始外观中涉及的任何绘图和动画完成后调用此方法。您可以重写此方法以执行适合该时间的任务,例如不应干扰演示动画的工作,或在视图出现后启动您想要开始的动画。

    【讨论】:

    • 好的,但是如果我将 view.bounds.height 更改为 1000 之类的值,那不应该吗?我实际上是在按照一个教程完成它并且它有效。
    • 可以分享一下教程的链接吗?
    • 不幸的是,这是一个付费墙后面的视频教程
    • 没关系,但必须在viewDidAppear中进行。遵循文档
    • 您可以在viewDidAppear: 上执行此操作(当您完全确定所有内容都已设置时),或者更好的是,在viewDidLayoutSubviews 上执行此操作(在viewDidAppear: 之前调用,但在viewWillAppear: 之后调用)。
    【解决方案2】:

    尝试将您的代码更改为viewDidAppear

    您可以在this old post找到更多信息。

    【讨论】:

      【解决方案3】:

      这段代码来自 Ray Wenderlich 的 iOS Animation by Tutorials 一书,对吧? 我有同样的问题。我找到了这个问题的原因 - 本教程中的视图不使用自动布局和大小类,这就是标签在设置其坐标时没有响应的原因。尝试在viewWillAppear 方法中更改标签的颜色,如labelText.textColor = UIColor.greenColor(),一切正常,但如果您尝试设置坐标,如labelText.center.x -= view.bounds.width,则没有任何反应。因此,单击您的视图并转到文件检查器,滚动一下,您会看到复选标记 Use Auto LayoutUse Size Classes 取消选中它,您将获得所需的内容。但是你会感到很痛苦,因为这对于没有自动布局的代码来说是一个不同且漫长的故事。那么祝你好运吧。

      【讨论】:

        【解决方案4】:

        加载视图控制器时会调用几个方法。他们的订单是这样的(UIViewController):

        loadView

        viewDidLoad

        viewWillAppear:

        viewWillLayoutSubviews

        layoutSubviews(在视图控制器内的UIViews 上)

        viewDidLayoutSubviews(这里视图控制器知道一切都设置好了)

        viewDidAppear:

        来自viewDidLayoutSubviews,您完全确定您的更改将生效,因为元素已设置。在此之前,您无法确定(除非您缓存了视图控制器并且它再次出现)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-09-29
          • 1970-01-01
          • 2018-02-23
          • 2013-06-06
          • 2014-05-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多