如何获取和存储 UIView 的 属性 的初始值?

How do I get and store an initial value of a property of a UIView?

我在 main.storyboard 中布置并约束了一个 UIView,并在 ViewController.swift 中有一个 IBOutlet 将其连接到相应的 ViewController class。

我需要在各种不同的函数中操纵视图的位置,为此我需要能够访问视图的初始 y 位置的值。我尝试使用

来做到这一点
public let inputRest = self.userInputView.frame.origin.y

在 ViewController class 的正文中。但是,这给了我错误 Cannot use instance member 'userInputView' within property initializer; property initializers run before 'self' is available.

如何将实例成员的属性存储在变量中以便在函数中调用它们?有没有办法在 viewDidLoad() 中声明这个变量并在其他函数中访问它?

感谢您的帮助。

您不能将其声明为 class 级别 属性,因为在实例化 ViewController 之前不会创建它。我想你要做的是如下。

//instantiate with an initial value of 0.0 
public var inputRest : CGFloat = 0.0 

override func viewDidLoad() {
    super.viewDidLoad()

    //you can do this here, because the userInputView will have been created
    self.inputRest = self.userInputView.frame.origin.y
}

这是 ViewControllers 的固有限制,它是从情节提要中实例化的,不能具有只能定义一次的 let 属性。有一些方法可以通过重写用于从编码器创建视图控制器的构造函数来解决这个问题,但它需要做很多工作,不容易阅读,而且很多工作都是徒劳的。