Ios 为什么在Swift中以编程方式声明约束时会出现错误?
我在名为Ios 为什么在Swift中以编程方式声明约束时会出现错误?,ios,swift,constraints,Ios,Swift,Constraints,我在名为Home的UIViewController类中声明一个约束。下面是代码的样子: class Home: UIViewController { @IBOutlet weak var buttonUpgrade: UIButton! var constraint = NSLayoutConstraint (item: buttonUpgrade, attribute: NSLayoutAttribute.Bottom, relatedBy: NSLayoutRelation.Equa
Home
的UIViewController
类中声明一个约束。下面是代码的样子:
class Home: UIViewController {
@IBOutlet weak var buttonUpgrade: UIButton!
var constraint = NSLayoutConstraint (item: buttonUpgrade,
attribute: NSLayoutAttribute.Bottom,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: 500)
...
}
但是,我遇到了以下错误:Home.type没有名为buttonUpgrade的成员
。为什么?
您可以从这里下载项目:。如前所述,您不能在函数外编写此类代码。但您可以这样声明变量全局(在函数外部):
var constraint:NSLayoutConstraint!
然后,您可以在您的viewDidLoad
-方法中对其进行初始化,该方法将被调用一次:
constraint = NSLayoutConstraint (item: buttonUpgrade,
attribute: NSLayoutAttribute.Bottom,
relatedBy: NSLayoutRelation.Equal,
toItem: self.view,
attribute: NSLayoutAttribute.Bottom,
multiplier: 1,
constant: 500)
完成此操作后,可以从类中的任何位置访问约束变量。只需确保变量在使用前已填充。代码需要在方法中。您没有注意到viewDidLoad中有相同的代码,并且该代码不会给您带来错误吗?是的,我注意到了。谢谢你的评论。如果我可以为
NSLayoutConstraint
变量var constraint
设置一个全局变量,以避免任何错误,例如无法同时满足约束
,这将非常有用。事实上,如果我试图声明另一个时间var约束
,并为其常量
分配一个新值,我就会收到该错误。非常感谢您的帮助。我不确定您的意思,但您可以在文件顶部为约束创建一个属性var constraint:NSLayoutConstraint。然后,在viewDidLoad(或其他任何地方)中创建约束时,只需使用self.constraint=。。。(实际上,您甚至不需要Swift中的“self”,但我仍然喜欢使用它)。问题是约束的初始化取决于同一类的其他属性。可能重复或(使用不同的解决方案)。@rdelmar这是个好主意!非常感谢。但是我如何告诉编译器约束具有属性:nslayouttribute.Bottom
?