使 UILabel 约束显示全宽

Posted

技术标签:

【中文标题】使 UILabel 约束显示全宽【英文标题】:Make UILabel Constraint to display full width 【发布时间】:2016-03-17 02:18:56 【问题描述】:

我正在努力实现使我的 uilabel 从左侧延伸到右侧(全宽),我可以在情节提要中轻松做到这一点,但我的应用程序中有一部分需要以编程方式显示 uilabel。 这是我的代码:

textLabel.backgroundColor = UIColor.grayColor()
textLabel.text = StringsLabel.NOINTERNET
textLabel.textAlignment = .Center
textLabel.font = UIFont.boldSystemFontOfSize(24.0)
textLabel.translatesAutoresizingMaskIntoConstraints = false
centerView.addSubview(textLabel)

let centreXTopLabel:NSLayoutConstraint = NSLayoutConstraint(item: textLabel, attribute: NSLayoutAttribute.CenterX, relatedBy: NSLayoutRelation.Equal, toItem: centerView, attribute: NSLayoutAttribute.CenterX, multiplier: 1, constant: 0);
        centerView.addConstraint(centreXTopLabel)

这是我的截图:

【问题讨论】:

你需要使用AutoLayout,使用NSLayoutConstraint或者第三方Masonry或者SnapKit 如果您必须以编程方式进行,那么视觉格式语言将是您的最佳选择。这是一个教程raywenderlich.com/110393/… 如果您将 UILabel 放在另一个 UIView 中,将全宽度约束添加到该 UIView,将其背景颜色设置为您需要的颜色,则可能会发生您想要达到的效果。然后在该视图中添加 UILabel 并再次使用约束将其居中在该 UIView 中。目前您的 UILabel 的背景是灰色的,它不会拉伸,因为它是文本的大小 【参考方案1】:

在 0 点将其固定到视图的前导和尾随:

let leading = NSLayoutConstraint(item: textLabel, attribute: .Leading, relatedBy: .Equal, toItem: centerView, attribute: .Leading, multiplier: 1, constant: 0)
let trailing = NSLayoutConstraint(item: textLabel, attribute: .Trailing, relatedBy: .Equal, toItem: centerView, attribute: .Trailing, multiplier: 1, constant: 0)
NSLayoutConstraint.activateConstraints([leading, trailing])

请注意,这将导致布局不明确——您需要添加一个垂直放置标签的约束。

【讨论】:

嗨,我没有使用这个 NSLayoutConstraint.activateConstraints([leading, trailing]) 我使用这个 centerView.addConstraints([leading, trailing]) 因为我支持 ios7。但顺便说一句,您发布的代码不起作用:( 我在上面发布的屏幕截图上的输出仍然相同。 @SydneyLoteria 原来您在上面发布的屏幕截图就是您所描述的(从左到右拉伸)。如果你想要一个不同的效果,你没有正确解释它。 上面的截图甚至没有拉伸,你可以看到灰色背景只覆盖了标签内容的宽度。 @SydneyLoteria 尝试设置centerView 的背景颜色。您如何为centerView 设置约束可能是问题所在。【参考方案2】:

试试这个..

let views = ["textLabel" : textLabel]
let formatString = "|-[textLabel]-|"

 let constraints = NSLayoutConstraint.constraintsWithVisualFormat(formatString, options:.AlignAllTop , metrics: nil, views: views)

NSLayoutConstraint.activateConstraints(constraints)

【讨论】:

以上是关于使 UILabel 约束显示全宽的主要内容,如果未能解决你的问题,请参考以下文章

将 UILabel 拉伸到 UICollectionViewCell 的全宽

在全宽 UIView 内将 UILabel 和 UIImageView 水平对齐

使用约束时不显示 UILabel 子类

UITableViewCell 中的 UILabel 约束横向变化

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

UIButton 约束失败,但适用于 UILabel