SWIFT:如何更新StoryBoard中的NSLayoutConstraint?

问题描述:

我在我的superView中创建了2个按钮,现在我想根据用户角色更改@IBOutlet weak var bottomLayOut: NSLayoutConstraint!SWIFT:如何更新StoryBoard中的NSLayoutConstraint?

示例如下:如果用户是代理角色,但不是教师角色,我希望将NSLayoutConstraint的第二项从教师输入.bottom更新为AgentEntry按钮的底部。

enter image description here 是那个posible?

更新:

轮流translatesAutoresizingMaskIntoConstraints解决这个真: 如:teacherBtn.translatesAutoresizingMaskIntoConstraints = true 比,我们可以同时使用约束和代码改变teacherBtn的框架

+0

只是想知道,为什么不改变基于角色的按钮名称和颜色,而不是改变约束? –

+0

2按钮可以在同一时间显示 – Neko

+0

让我明白一点。让我们说,用户角色是老师,所以你想要显示顶部的教师按钮和底部的代理按钮,不是吗? –

两种方式我能想到做这一关我的头顶:

  1. 以编程方式设置约束。创建一个包含按钮上的电流约束的属性,然后你可以做沿东西线(免责声明:写在Chrome中,可能包含错别字,根据需要编辑):

`如果让约束=自我。 buttonConstraints { NSLayoutConstraint.deactivate(约束) }

let views: [String : UIView] = ["Agent" : self.agentButton, "Teacher" : self.teacherButton] 

let newConstraints: [NSLayoutConstraint] = { 
    switch role { 
    case .teacherAndAgent: 
     self.teacherButton.isHidden = false 
     self.agentButton.isHidden = false 
     return NSLayoutConstraint.constraints(withVisualFormat: "V:[agent]-[teacher]-|", metrics: nil, views: views) 
    case .teacherOnly: 
     // you get the idea 
    case .agentOnly: 
     // ditto 
    } 
}() 

NSLayoutConstraint.activate(newConstraints) 
self.buttonConstraints = newConstraints` 
  1. 什么可能是简单的,虽然是使用UIStackView握住你的按钮。至少在当前的macOS上,NSStackView会根据它的哪些视图隐藏来自动调整布局。如果iOS上的UIStackView的行为方式相同,它可能会为您做很多工作,而无需手动布局约束。
开始=>
+0

我认为StackView是一个好主意〜 – Neko