我在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
}
答案 0 :(得分:2)
你永远不会知道界限,直到所有标签出现在屏幕上。
尝试在viewDidAppear方法中执行相同操作。
来自文档:
在完成视图初始外观中涉及的任何绘图和动画后调用此方法。您可以覆盖此方法以执行适合该时间的任务,例如不应干扰演示动画的工作,或者在视图出现后启动要开始的动画。
答案 1 :(得分:2)
这段代码来自Ray Wenderlich的书籍iOS Animation by Tutorials,对吧?
我有同样的问题。我发现了这个问题的原因 - 教程中的视图不使用自动布局和大小类,这就是标签在设置坐标时没有响应的原因。尝试在viewWillAppear
方法中更改标签的颜色,例如labelText.textColor = UIColor.greenColor()
,一切顺利,但如果您尝试设置labelText.center.x -= view.bounds.width
之类的坐标,则不会发生任何事情。因此,请点击您的视图并转到文件检查器,滚动一下,您会看到复选标记Use Auto Layout
和Use Size Classes
取消选中它,您将获得所需内容。但是你会感到痛苦,因为在没有自动布局的情况下,这是一个不同的长故事。那么祝你好运吧。
答案 2 :(得分:0)
尝试将代码更改为viewDidAppear
。
您可以在this old post中找到更多信息。
答案 3 :(得分:0)
加载View控制器时调用了几种方法。他们的订单是这样的(在UIViewController
):
loadView
viewDidLoad
viewWillAppear:
viewWillLayoutSubviews
layoutSubviews
(在视图控制器内的UIView
上)
viewDidLayoutSubviews
(此处视图控制器知道所有内容都已设置)
viewDidAppear:
从viewDidLayoutSubviews
,您完全确定您的更改将生效,因为已设置元素。在此之前,您无法确定(除非您缓存了视图控制器并且它第二次出现)。