SWIFT:如何更新StoryBoard中的NSLayoutConstraint?
问题描述:
我在我的superView中创建了2个按钮,现在我想根据用户角色更改@IBOutlet weak var bottomLayOut: NSLayoutConstraint!
。SWIFT:如何更新StoryBoard中的NSLayoutConstraint?
示例如下:如果用户是代理角色,但不是教师角色,我希望将NSLayoutConstraint
的第二项从教师输入.bottom更新为AgentEntry按钮的底部。
更新:
轮流translatesAutoresizingMaskIntoConstraints
解决这个真: 如:teacherBtn.translatesAutoresizingMaskIntoConstraints = true
比,我们可以同时使用约束和代码改变teacherBtn的框架
答
两种方式我能想到做这一关我的头顶:
- 以编程方式设置约束。创建一个包含按钮上的电流约束的属性,然后你可以做沿东西线(免责声明:写在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`
- 什么可能是简单的,虽然是使用UIStackView握住你的按钮。至少在当前的macOS上,NSStackView会根据它的哪些视图隐藏来自动调整布局。如果iOS上的UIStackView的行为方式相同,它可能会为您做很多工作,而无需手动布局约束。
+0
我认为StackView是一个好主意〜 – Neko
只是想知道,为什么不改变基于角色的按钮名称和颜色,而不是改变约束? –
2按钮可以在同一时间显示 – Neko
让我明白一点。让我们说,用户角色是老师,所以你想要显示顶部的教师按钮和底部的代理按钮,不是吗? –