swift - 以编程方式创建约束以查看 Controller 边距

标签 swift nslayoutconstraint

我正在尝试制作一个 View ,该 View 将充当一种“面板”,附加到 View Controller 的右侧。

即绑定(bind)到父 View Controller 的尾边距、上边距和下边距,静态宽度为300

但是,我似乎无法正确处理,我要么打破约束,要么做一些 xcode 告诉我是非法的事情。

我做错了什么?

Controller 中的代码

    let myView = UIView()
    view.backgroundColor = UIColor.redColor()
    self.view.addSubview(view)
    let topConstraint = NSLayoutConstraint(item: myView,
                                           attribute: .Top,
                                           relatedBy: .Equal,
                                           toItem: self.topLayoutGuide,
                                           attribute: .Bottom,
                                           multiplier: 1,
                                           constant: 0)

    let trailingConstraint = NSLayoutConstraint(item: self.view,
                                                attribute: .TrailingMargin,
                                                relatedBy: .Equal,
                                                toItem: myView,
                                                attribute: .Trailing,
                                                multiplier: 1,
                                                constant: 0)

    let bottomConstraint = NSLayoutConstraint(item: self.bottomLayoutGuide,
                                              attribute: .Top,
                                              relatedBy: .Equal,
                                              toItem: myView,
                                              attribute: .Bottom,
                                              multiplier: 1,
                                              constant: 0)

    let widthConstraint = NSLayoutConstraint(item: myView,
                                             attribute: .Width,
                                             relatedBy: .Equal,
                                             toItem: nil,
                                             attribute: .NotAnAttribute,
                                             multiplier: 1,
                                             constant: 300)

    self.view.addConstraints([trailingConstraint])
    view.addConstraints([topConstraint, bottomConstraint, widthConstraint])

最佳答案

实际上,您的代码中的问题是您没有将 myviewtranslatesAutoresizingMaskIntoConstraints 设置为 false,每当您想使用自动 -布局约束,那么您必须将 View 的 translatesAutoresizingMaskIntoConstraints 设置为 false。 另一个问题是你没有在 self.view 上添加 myview 我已经更新了你的代码并且它工作正常根据你的约束。

将以下代码放入您的 ViewController 中。

let myView = UIView()
myView.backgroundColor = UIColor.redColor()
self.view.addSubview(myView)
myView.translatesAutoresizingMaskIntoConstraints = false

view.addConstraint(NSLayoutConstraint(item: myView, attribute: .Top, relatedBy: .Equal, toItem: self.topLayoutGuide, attribute: .Bottom, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: myView, attribute: .Bottom, relatedBy: .Equal, toItem: self.bottomLayoutGuide, attribute:.Top, multiplier: 1, constant: 20))

view.addConstraint(NSLayoutConstraint(item: myView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute,multiplier: 1, constant: 300))
view.addConstraint(NSLayoutConstraint(item: myView, attribute: .TrailingMargin, relatedBy: .Equal, toItem: view, attribute: .TrailingMargin, multiplier: 1, constant: 0))

关于swift - 以编程方式创建约束以查看 Controller 边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36507043/

相关文章:

swift - 如何在 Swift 中从 TabBarController 访问 viewcontroller 的 NSTimer

ios - 无法在 UIImageView 上设置边框

ios - 如何使用 NSLayoutConstraint 将宽度固定到某些 UIView?

ios - 如何避免旋转过程中的约束冲突?

ios - 为什么 Storyboard约束会自动更改?

ios - 如何使用自动布局移动标签并为更改设置动画?

ios - 我可以更改 NSLayoutConstraint 的乘数属性吗?

swift - 捕获 watchOS2 的非事件状态

swift - NSPopUpButton 子类 attributedTitle

ios - 如何要求泛型类型使用协议(protocol)中的特定类型实现泛型协议(protocol)