Swift - Xcode 8 - iOS 10 - 无法创建简单约束
Posted
技术标签:
【中文标题】Swift - Xcode 8 - iOS 10 - 无法创建简单约束【英文标题】:Swift - Xcode 8 - iOS 10 - Can't create simple constraint 【发布时间】:2016-09-18 03:35:59 【问题描述】:编辑 - 我修好了。查看答案。
我正在尝试学习如何以编程方式创建约束。我试图将UILabel
限制在屏幕顶部,使用此代码,在viewDidLoad
:
override func viewDidLoad()
super.viewDidLoad()
//the variable label already exists. I make a UILabel.
label = UILabel()
label.text = "Hello"
label.backgroundColor = UIColor(red: 1, green: 1, blue: 0, alpha: 1)
//I add the label to the ViewController
view.addSubview(label)
//I use an array of constraints because I will make more later.
let constraints : [NSLayoutConstraint] = [
NSLayoutConstraint(item: label, attribute: .top, relatedBy: .equal, toItem: topLayoutGuide, attribute: .bottom, multiplier: 1.0, constant: 0.0)
]
view.addConstraints(constraints)
当我运行我的应用程序时,我收到一个以以下开头的错误:
[LayoutConstraints] 无法同时满足约束。
我对约束的预期方程式是:
label.top = 1.0 * topLayoutGuide.bottom + 0.0
当我使用 Interface Builder 创建似乎相同的约束时,它起作用了。但是,当我尝试以编程方式执行此操作时,它不会。我在做什么有什么问题,我如何以编程方式使用NSLayoutConstraint
进行约束,将我的标签固定在状态栏下方的屏幕顶部?
我的来源:
Apple - Anatomy of a Constraint
Apple - Programmatically creating Constraints
*** - SWIFT | Adding constraints programmatically
【问题讨论】:
Fwiw,如果您正在做很多编程约束,请查看 SnapKit 或其他一些 AutoLayout 框架,让您的生活轻松一百万倍。 @brandonscript 我知道,我宁愿使用 IB 或其他东西,但我想了解如何以编程方式进行。 【参考方案1】:这可以通过将translatesAutoresizingMaskIntoConstraints
设置为 false 来解决,以避免与现有的掩码约束冲突:
label.translatesAutoresizingMaskIntoConstraints = false
【讨论】:
以上是关于Swift - Xcode 8 - iOS 10 - 无法创建简单约束的主要内容,如果未能解决你的问题,请参考以下文章
导航不出现 Xcode 8.1 iOS 10 Swift 3
Xcode 8.3 Swift 3 FCM 通知上的 Firebase 问题 iOS 10.3 不起作用
如何在 Xcode 8 和 iOS 10 中使用 AFNetworking 类和 Swift 3 上传图像
Swift 3、iOS 10+、xCode 8.3+、Quickblox - 在保持纵横比/视频分辨率的同时切换全屏远程流