ios - 如何更新 StoryBoard 中的 NSLayoutConstraint?

标签 ios swift nslayoutconstraint

我在我的 superView 中创建了 2 个按钮,现在我想更改 @IBOutlet weak var bottomLayOut: NSLayoutConstraint! 取决于用户角色。

示例是:如果用户是代理角色而不是教师角色,我想将 NSLayoutConstraint 的第二项从 Teacher Entry .bottom 更新到 AgentEntry button's bottom 。

enter image description here 这可能吗?

更新:

通过将 translatesAutoresizingMaskIntoConstraints 设置为 true 来解决这个问题: 例如:teacherBtn.translatesAutoresizingMaskIntoConstraints = true 除此之外,我们可以同时使用约束和代码来更改 teacherBtn 的框架

最佳答案

我可以想到两种方法来做到这一点:

  1. 以编程方式设置约束。创建一个包含按钮当前约束的属性,然后您可以按照以下方式做一些事情(免责声明:用 Chrome 编写,可能包含拼写错误,适当编辑):

` 如果让约束 = self.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 会根据隐藏的 View 自动调整布局;如果 iOS 上的 UIStackView 以相同的方式运行,它可能会为您完成很多工作,而无需手动处理布局约束。

关于ios - 如何更新 StoryBoard 中的 NSLayoutConstraint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45929779/

相关文章:

ios - 如何在 iOS UITableViewController 中初始化一个属性

ios - [FBSDKLoginManager logInWithReadPermissions :fromViewController:handler:]: unrecognized selector sent to instance

ios - 无法从 Objective C 中的 swift 类调用方法

ios - 当推送到另一个 View 并返回 IOS Swift 时保持编辑模式

ios - 没有明确的宽度约束和更大或相等的尾随空间行为不当的自动布局

ios - 转至 UIViewController 而不初始化新对象

iphone - 向 UIScrollView 添加标签

ios - 显示隐藏 View 真的很慢

ios - 如何在布局 subview 后更新约束?

ios - 标签不自动调整距离