Swift 使用约束以编程方式创建UILabel?

Swift 使用约束以编程方式创建UILabel?,swift,xcode,constraints,uilabel,Swift,Xcode,Constraints,Uilabel,我想做的是在每次代码中发生特定操作时以编程方式创建一个新的UILabel。我知道要给标签的x、y和高度,但我不想给它设定宽度。我想约束边,使UILabel宽度等于屏幕的宽度,并使标签宽度在方向翻转时改变 我曾考虑使用: CGRect(x:, y:, width:, height:) 然而,如果我使用这个,我必须给它一个设定的宽度,所以我认为它不会工作 我还尝试使用: CGPoint(x:, y:) 然后设置前导、尾随和高度锚,然而,这似乎也不起作用,因为即使它确实编译了,当我尝试创建一个新的

我想做的是在每次代码中发生特定操作时以编程方式创建一个新的UILabel。我知道要给标签的x、y和高度,但我不想给它设定宽度。我想约束边,使UILabel宽度等于屏幕的宽度,并使标签宽度在方向翻转时改变

我曾考虑使用:

CGRect(x:, y:, width:, height:)
然而,如果我使用这个,我必须给它一个设定的宽度,所以我认为它不会工作

我还尝试使用:

CGPoint(x:, y:)
然后设置前导、尾随和高度锚,然而,这似乎也不起作用,因为即使它确实编译了,当我尝试创建一个新的UILabel时,我会得到一个错误


我对Swift编程有点陌生,所以我不确定是否有明显的修复方法。

您可以使用以下代码以编程方式创建UILabel

private let label: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 0
    label.text = "Hello World"
    return label
}()
然后在viewDidLoad()中


您可以使用以下代码以编程方式创建UILabel

private let label: UILabel = {
    let label = UILabel()
    label.translatesAutoresizingMaskIntoConstraints = false
    label.numberOfLines = 0
    label.text = "Hello World"
    return label
}()
然后在viewDidLoad()中


正如您所说,我们已经为
标签
提供了
x、y和高度
,即

let x: CGFloat = 0
let y: CGFloat = 0
let height: CGFloat = 50
让我们使用上述详细信息创建一个
标签
。还可以根据需要将
标签的
宽度设置为
UIScreen.main.bounds.width

let label = UILabel(frame: CGRect(x: x, y: y, width: UIScreen.main.bounds.width, height: height))
label.text = "This is a sample text"
不要忘记将
标签的
翻译自动调整大小GMaskintoConstraints
设置为
false
,并将其添加到所需的
子视图中

label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)
添加
标签的相关
约束
及其
超级视图
-
顶部、底部、前导、高度
。如果需要,您完全可以添加
底部约束。这完全取决于你的用户界面

我正在将
标签添加到viewController视图的
顶部

NSLayoutConstraint.activate([
    label.heightAnchor.constraint(equalToConstant: height),
    view.topAnchor.constraint(equalTo: label.topAnchor),
    view.leadingAnchor.constraint(equalTo: label.leadingAnchor),
    view.trailingAnchor.constraint(equalTo: label.trailingAnchor)
    ])

正如您所说,我们已经为
标签
提供了
x、y和高度
,即

let x: CGFloat = 0
let y: CGFloat = 0
let height: CGFloat = 50
让我们使用上述详细信息创建一个
标签
。还可以根据需要将
标签的
宽度设置为
UIScreen.main.bounds.width

let label = UILabel(frame: CGRect(x: x, y: y, width: UIScreen.main.bounds.width, height: height))
label.text = "This is a sample text"
不要忘记将
标签的
翻译自动调整大小GMaskintoConstraints
设置为
false
,并将其添加到所需的
子视图中

label.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(label)
添加
标签的相关
约束
及其
超级视图
-
顶部、底部、前导、高度
。如果需要,您完全可以添加
底部约束。这完全取决于你的用户界面

我正在将
标签添加到viewController视图的
顶部

NSLayoutConstraint.activate([
    label.heightAnchor.constraint(equalToConstant: height),
    view.topAnchor.constraint(equalTo: label.topAnchor),
    view.leadingAnchor.constraint(equalTo: label.leadingAnchor),
    view.trailingAnchor.constraint(equalTo: label.trailingAnchor)
    ])

检查是否需要添加高度约束,即使我已经在CGRect()中设置了高度?另外,是将视图约束设置为等于label还是将label设置为等于view更好?如果您有高度,您当然可以。出于某种原因,“label.translatesAutoResizezingMaskintoConstraints=false”一行给我带来了问题(将y位置更改为0)。当我注释它时,标签在正确的位置,但当使用它时,标签在视图的顶部。您使用了哪些约束条件<代码>标签.TranslatesAutoResizengMacintoConstraints
必须为
false
如果您使用
自动布局
,否则可能会产生意外的结果。我添加了您建议的约束,但前后锚点切换为(例如)label.leadingAnchor.constraint(equalTo:view.leadingAnchor)。我在自动布局中还有许多其他约束,但对于与标签完全无关的不同事物(例如按钮等),即使我已经在CGRect()中设置了高度,我是否需要添加高度约束?另外,是将视图约束设置为等于label还是将label设置为等于view更好?如果您有高度,您当然可以。出于某种原因,“label.translatesAutoResizezingMaskintoConstraints=false”一行给我带来了问题(将y位置更改为0)。当我注释它时,标签在正确的位置,但当使用它时,标签在视图的顶部。您使用了哪些约束条件<代码>标签.TranslatesAutoResizengMacintoConstraints
必须为
false
如果您使用
自动布局
,否则可能会产生意外的结果。我添加了您建议的约束,但前后锚点切换为(例如)label.leadingAnchor.constraint(equalTo:view.leadingAnchor)。在自动布局中,我还有许多其他约束,但是对于不同的东西(例如按钮等),它们与标签根本不相关。为什么第二部分需要在viewDidLoad中?我可以在创建标签的同一个函数中使用第二部分(约束)(假设我在函数中创建标签)?为什么第二部分需要在viewDidLoad中?我是否可以在创建标签的同一个函数中使用第二部分(约束)(假设我在函数中创建标签)?