2016-07-05 65 views
0

我使用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”约束总是搞乱了整个菜单。我开始在这里疯狂:)

回答

0

如果您使用自动布局来定位视图,则对框架的任何更改(如您在此处使用中心属性所做的操作)都将被忽略。

您需要做的是确定您需要更改以将视图移动到所需位置的约束条件。例如:

您想将button1 50点移动到view.center的左侧。假设视图是menuSubview的超级视图,您可以使用

1)停用负责button1水平位置的约束。你如何做这主要取决于你是否在代码或Interface Builder中创建了约束。后者将要求您创建一些限制的网点。

2)创建按钮1的的centerX锚和视图的的centerX锚之间一个新的约束带的-50恒定,像这样(iOS的9码)

button1.centerXAnchor.constraintEqualToAnchor(view.centerXAnchor, constant: -50.0).active = true