ViewWillAppear没有执行代码

时间:2015-09-22 19:25:13

标签: ios swift

我在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



}

4 个答案:

答案 0 :(得分:2)

你永远不会知道界限,直到所有标签出现在屏幕上。

尝试在viewDidAppear方法中执行相同操作。

来自文档:

  

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

尝试将代码更改为viewDidAppear

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

答案 3 :(得分:0)

加载View控制器时调用了几种方法。他们的订单是这样的(在UIViewController):

loadView

viewDidLoad

viewWillAppear:

viewWillLayoutSubviews

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

viewDidLayoutSubviews(此处视图控制器知道所有内容都已设置)

viewDidAppear:

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