使用 NSLayout 设置 UILabel 的 X 和 Y 值

Posted

技术标签:

【中文标题】使用 NSLayout 设置 UILabel 的 X 和 Y 值【英文标题】:Set X and Y values of UILabel using NSLayout 【发布时间】:2017-08-21 23:27:21 【问题描述】:

我正在添加一个 UI 标签,并且正在尝试编程 UI 代码。我使用以下代码设置了我的标签:

let titleLabel: UILabel = 
    let lb = UILabel()
    lb.translatesAutoresizingMaskIntoConstraints = false
    lb.textAlignment = .center
    lb.numberOfLines = 1
    lb.textColor = UIColor.black
    lb.font=UIFont.systemFont(ofSize: 22)
    lb.backgroundColor = UIColor.white
    return lb

然后使用此代码添加约束:

func setupTitleLabel() 


    titleLabel.translatesAutoresizingMaskIntoConstraints = false
    titleLabel.heightAnchor.constraint(equalToConstant: 100).isActive = true
    titleLabel.widthAnchor.constraint(equalToConstant: 200).isActive = true
    titleLabel.centerXAnchor.constraint(equalTo: titleLabel.superview!.centerXAnchor).isActive = true
    titleLabel.centerYAnchor.constraint(equalTo: titleLabel.superview!.centerYAnchor).isActive = true

我稍后会调用这个函数。但是,我不确定如何更改为 X 和 Y 值。目前,它设置为 X 和 Y 的页面中间,但我如何将它移到顶部。

【问题讨论】:

使用这两个 titleLabel.superview!.leadingAnchor , titleLabel.superview!.topAnchor 而不是 titleLabel.superview.centerXAnchortitleLabel.superview!.centerYAnchor 【参考方案1】:

正如我在评论中所说,如果您需要将标签固定到标签超级视图的顶部,则您错误地使用了 titleLabel.superview!.centerYAnchor,您需要改用 titleLabel.superview!.topAnchor

替换这个

titleLabel.centerYAnchor.constraint(equalTo: titleLabel.superview!.centerYAnchor).isActive = true

由此

titleLabel.centerYAnchor.constraint(equalTo: titleLabel.superview!.topAnchor).isActive = true

【讨论】:

我正在尝试添加文本以查看标签的位置,并且 lbl.text = "string" 未显示文本:/ 您确定您的 UILabel 已添加到您想要的视图中吗?我在任何地方都看不到self.view.addSubView(self.titleLabel)@user8480321 然后将你的 UILabel 添加到正确的 UIView,你必须有你想要的结果@user8480321【参考方案2】:

我理解的情况是标签在centerX和centerY,你希望它以后在superView的顶部。如果是这样,我认为你可以使用var centerYAnchor: NSLayoutConstraint?

centerYAnchor = titleLabel.centerYAnchor.constraint(equalTo: titleLabel.superview!.centerYAnchor)
centerYAnchor.isActive = true

而当你以后想改变顶部的标签时,你可以设置centerYAnchor.isActive = false并设置标签的topAnchor。

 titleLabel.topAnchor.constraint(equalTo: titleLabel.superview!.topAnchor).isActive = true

【讨论】:

我只是想给页面添加一个标题。我正在尝试在页面顶部设置 Y 值,但它似乎不起作用。使用您的方法,它只会从中间略微增加 Y 值 我觉得centerXAnchor,heightAnchor,widthAnchor和topAnchor,4个anchor就足够让label在你想要的位置了。

以上是关于使用 NSLayout 设置 UILabel 的 X 和 Y 值的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 带有 SpriteNodes 和 UILabel 的 NSLayout 表

NSLayout 约束失败

使用 UIAppearance 代理设置 UILabel 样式

在UITableview swift中使用UILabel和UIWebView设置heightForRow

UILabel的使用

如何使用自动布局约束为移动 UILabel 设置动画?