【问题标题】:How to find if UILabel text is shortened/shrinked?如何查找 UILabel 文本是否缩短/缩小?
【发布时间】:2011-11-10 13:38:48
【问题描述】:
我正在开发适用于 iOS(iPhone 和 iPad)的应用程序,并且我的视图上有一个 UILabel,它显示了一些文本。如果文字过长,UILabel 会自动缩小,例如:
“这是一些长文本”将显示“这是一些...”
这种行为是正确的,完全可以接受,甚至是意料之中的,但我想知道文本是否被缩短。有什么办法可以查到 UILabel 是否缩短了它的内容?
我需要非常简单的解决方案,因为我想使用 UILabel 魔术功能,例如自动减小字体大小以适应等。有时文本会很长,所以我会给用户一种在另一个视图中查看它的方法点击按钮后。但是在文本不会那么长的情况下,我想隐藏那个按钮以使界面简单。
任何想法如何实现这一点将不胜感激。
【问题讨论】:
标签:
objective-c
ios
uilabel
【解决方案1】:
以标签的标准字体询问标签文本的长度。如果它比标签的宽度长,它将被绘制得更小以适合。
CGSize stringSize = [aLabel.text sizeWithFont:aLabel.font];
if (stringSize.width > aLabel.frame.size.width) {
// It's drawing the label with a reduced font.
}
注意:这是一个旧答案。随着 Apple 更新他们的 API,有些事情必须改变。基本技术仍然有效,但使用的方法调用应该更新。有关更新,请参阅 Vins 答案。
【解决方案2】:
在 iOS 7 中,不推荐使用 sizeWithFont。
CGSize stringSize = [aLabel.text sizeWithAttributes:@{NSFontAttributeName: aLabel.font}];
if (stringSize.width > aLabel.frame.size.width) {
// It's drawing the label with a reduced font.
}
如果标签是多行的:
CGSize stringSize = [aLabel.text sizeWithAttributes:@{NSFontAttributeName: aLabel.font}];
if (stringSize.width > aLabel.frame.size.width*numOfLines) {
// It's drawing the label with a reduced font.
}