UILabel 使用 AutoLayout 实现具有居中放置和右侧按钮的 autoheight

Posted

技术标签:

【中文标题】UILabel 使用 AutoLayout 实现具有居中放置和右侧按钮的 autoheight【英文标题】:UILabel implemente autoheight with center placement and a button to the right using AutoLayout 【发布时间】:2016-02-23 19:09:49 【问题描述】:

我想要一个带有按钮的 UILabel,它像图片一样水平居中。

我已经为 UILabel 和标签和按钮之间的标准空间实现了“按水平中心对齐”,它通常工作得很好。 当 UILabel 的文本很长并且超出范围并且按钮甚至不可见时,就会出现问题。

我尝试将 UILabel 的行数设置为 0 并设置 questionLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.questionLabel.frame)what 使标签垂直增长。但它的宽度非常小(它是 ui 设计器的基本宽度)所以它看起来像一列文本。

所以问题是如何让 UILabel 变成:

在不隐藏按钮的情况下填充所有可用的水平空间 如果没有足够的水平空间将文本放入一行水平行中,则自动垂直缩放 水平居中

【问题讨论】:

【参考方案1】:

它缺少从UIImageViewtrailing 到容器视图或边距尾随的约束。我使用了Greater Than or Equal 约束,因此如果标签的长度很短,则图像将靠近标签 - 使用从标签到图像的horizontal space 约束。

这样,您的标签 - 相对于您的视图居中,将居中,并将使用所有可能使用的水平空间将 UIImageViewtrailing 约束尊重到视图,如下所示:

在下图中,可以看到标签根据约束达到了最大宽度:

【讨论】:

成功了!我还必须删除questionLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.questionLabel.frame),因为它会强制保留原始框架。【参考方案2】:

您可以删除宽度约束,并从标签右侧向图像添加水平空间约束,从标签左侧向视图左边框添加一个水平空间约束(将常量设置为 minY 值您的图像使其居中)

【讨论】:

以上是关于UILabel 使用 AutoLayout 实现具有居中放置和右侧按钮的 autoheight的主要内容,如果未能解决你的问题,请参考以下文章

使用 Autolayout Xcode6 在 Universal Storyboard 中相对于 UIImage 定位 UILabel

UItableviewcell中的多行UIlabel使用Autolayout

如何设置 UILabel 以通过 AutoLayout 包装 UIButton?

IOS - UIView中使用AutoLayout的UILabel动态高度

在iOS中使用autolayout调整内容大小的UILabel

为啥我的 UILabel 的 AutoLayout 不起作用