如果你想在你的 Xib 文件中定义你的自动布局上边距约束,你可以在 ViewController 的类文件中相对于你的 Xib 添加以下代码:
override func viewDidLoad() {
super.viewDidLoad()
if self.respondsToSelector("edgesForExtendedLayout") {
edgesForExtendedLayout = UIRectEdge.None
}
}
简单。但是问题是你不能有一个半透明的导航栏。
幸运的是,有几种替代方法。您可以使用 Storyboard 或代码将您的自动布局上边距定义为相对于您的顶部布局指南(而不是您的视图)。
如果您移至 Storyboard,请点击 Pin 按钮,选择您的上边距限制并选择顶部布局指南(见下图)。
如果您决定用代码定义所有UIButton 的约束,您可以使用Visual Format Language,如以下代码所示:
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
var button = UIButton()
button.backgroundColor = UIColor.blueColor()
button.setTranslatesAutoresizingMaskIntoConstraints(false)
view.addSubview(button)
var viewsDict = ["button" : button, "topLayoutGuide" : topLayoutGuide]
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:[topLayoutGuide]-20-[button]", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[button]-20-|", options: NSLayoutFormatOptions(0), metrics: nil, views: viewsDict))
}
}
最后,还有第四种(混合的)方式来执行您想做的事情。在 Xib 中设置约束,将上边距约束和 UIButton 拖到视图控制器类(将它们命名为 topConstraint 和 button)并将代码设置如下:
import UIKit
class ViewControllerTwo: UIViewController {
@IBOutlet weak var topConstraint: NSLayoutConstraint!
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
view.addConstraint(NSLayoutConstraint(item: button, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.topLayoutGuide, attribute: NSLayoutAttribute.Bottom, multiplier: 1, constant: 10))
view.removeConstraint(topConstraint)
}
}