我使用Autolayout来制作一个相当复杂的菜单,并且确实需要它。我的菜单中的所有按钮,UIViews等都位于一个名为“menuSubview”的独立UIView中。在子视图中覆盖UIButton的Autolayout中心值@ viewDidLayoutSubviews
如果用户按下一个按钮,整个“menuSubview”将切换到另一个位置以显示菜单的其他部分。有时menuSubview中的按钮也会移动。我总是将“菜单状态”(UserDefaults保存在get-set变量“lastMenu”中),并具有根据保存的“菜单状态”设置阿尔法和中心的功能。
我试着在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”约束总是搞乱了整个菜单。我开始在这里疯狂:)