我无法以编程方式移动按钮.
我在viewDidLoad中使用此代码,我不使用自动布局:
button.frame.origin = CGPoint(x: 0, y: 0)
Run Code Online (Sandbox Code Playgroud)
但是该按钮在运行时保持在屏幕上的原始位置.
奇怪的是,坐标实际上正在更新,但没有在屏幕上显示.
如果我运行以下代码:
print(button.frame.origin.x) // prints 45.0
button.frame.origin = CGPoint(x: 0, y: 0)
print(button.frame.origin.x) // prints 0.0
Run Code Online (Sandbox Code Playgroud)
但是在屏幕上按钮保持在45.
我究竟做错了什么?
在viewDidAppear方法中更改按钮位置,它将在运行时更改它的位置,您的代码将是:
override func viewDidAppear(animated: Bool) {
button.frame.origin = CGPoint(x: 0, y: 0)
}
Run Code Online (Sandbox Code Playgroud)
从这篇文章:viewDidLoad和viewDidAppear之间的区别
viewDidLoad当视图控制器首次加载到内存中时,只调用一次.这是您希望实例化任何实例变量并构建在此视图控制器的整个生命周期中存在的任何视图的位置.但是,此时通常尚未显示视图.
viewDidAppear在视图实际可见时调用,并且可以在视图控制器的生命周期中多次调用(例如,当模式视图控制器被关闭并且视图再次可见时).您可以在此处执行任何布局操作或在UI中执行任何绘图 - 例如,呈现模态视图控制器.