我将 Autolayout 用于相当复杂的菜单,并且确实需要它。我的菜单的所有按钮、UIViews 等都在一个名为“menuSubview”的单独 UIView 中。
如果用户按下一个按钮,整个“menuSubview”就会移动到另一个位置以显示菜单的其他部分。有时 menuSubview 中的按钮也会移动。我总是保存“菜单状态”(在 get-set 变量“lastMenu”中使用 Userdefaults),并具有根据保存的“菜单状态”设置 alpha 和中心的功能。
我尝试在 viewDidAppear、viewDidLayoutSubview 中调用“openLastMenu”函数——ViewController 的所有“viewDid”函数。按钮的“menuSubview”中心和 alpha 始终按预期运行......但按钮的中心根本不会 - 无论我调用什么“viewDid”函数。
(代码要复杂得多——我把它归结为调试和陈述我的观点)
override func viewDidAppear(animated: Bool) {
if lastMenu != nil {openLastMenu()}
}
func openLastMenu(){
menuSubview.center.x = view.center.x //works
menuSubview.center.y = view.center.y + 200 //works
button1.center.x = view.center.x - 50 //why you no behave???
button2.center.x = view.center.x + 50 //why you no behave???
button3.alpha = 0 //works
button4.alpha = 0 //works
}
为了调试,我什至制作了一个按钮子类来获取带有“didSet”的“中心”值,如果它们发生变化。似乎在采用正确的值后,它们再次更改为它们的 Autolayout-Position。
...哦,忽略按钮上带有“translatesAutoresizingMaskIntoConstraints”的约束总是会搞砸整个菜单。我开始在这里发疯了:)