iPhone如何识别UILabels是否会显示截断文字?

时间:2012-08-27 12:18:28

标签: objective-c ios uibutton uilabel

UILabel启动时,我需要在UILineBreakModeTailTruncation上显示更多按钮。即每当出现“...”时,我需要用一些动作显示我的更多按钮。

我正在做的是

float textWidth = [myString sizeWithFont:myLabel.font].width;
if (textWidth > myLabel.frame.size.width)
{
[moreButton setHidden:FALSE];
}
else
{
[moreButton setHidden:TRUE];
}

但我的问题是,当标签的行数设置为2时,只要呈现标签的第一行,就会显示更多按钮。

所以我试过了

if (textWidth > 2*myLabel.frame.size.width)
{
[moreButton setHidden:FALSE];
}
else
{
[moreButton setHidden:TRUE];
}

这在大多数情况下都适用。但在某些情况下,文本宽度与2 * labelsWidth的文本宽度相同,则会显示更多按钮。有没有直接的方法呢?

3 个答案:

答案 0 :(得分:0)

尝试使用constrainedToSize变体:

CGSize maxSize = CGSizeMake (myLabel.frame.size.width, 9999);  // a really tall frame

// this will give you the actual size of your string
CGSize actualSize = [myString sizeWithFont:myLabel.font constrainedToSize:maxSize lineBreakMode:UILineBreakModeWordWrap];

if (actualSize.height > myLabel.frame.size.height)
{
 // show your more button
}

答案 1 :(得分:0)

比较字符串的高度,因为宽度是相同的:

CGSize maximumSize = CGSizeMake(myLabel.frame.size.width, 500); //provide fixed label's width as we will have have fit text in that width. I have used approximately. height can be anything more view' height so take like that
CGSize strSize = [str sizeWithFont:[UIFont systemFontSize] constrainedToSize:maximumSize lineBreakMode:UILineBreakModeCharacterWrap];

if(strSize.height > 40) //Calulate height of two lines...
{
  [moreButton setHidden:NO]; //more than 2 lines
}
else
{
   [moreButton setHidden:YES];//less than 2 lines
}
}

答案 2 :(得分:0)

您可以使用此函数来获取字符串的大小:

CGSize size=[myLabel.text sizeWithFont:[UIFont systemFontOfSize:h] constrainedToSize:CGSizeMake(maxWidth, maxHeight) lineBreakMode:UILineBreakModeTailTruncation];

您还应该检查其他sizeWithFont:个功能。