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】:它缺少从UIImageView
的trailing
到容器视图或边距尾随的约束。我使用了Greater Than or Equal
约束,因此如果标签的长度很短,则图像将靠近标签 - 使用从标签到图像的horizontal space
约束。
这样,您的标签 - 相对于您的视图居中,将居中,并将使用所有可能使用的水平空间将 UIImageView
的 trailing
约束尊重到视图,如下所示:
在下图中,可以看到标签根据约束达到了最大宽度:
【讨论】:
成功了!我还必须删除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动态高度