1

我需要UILabelUILineBreakModeTailTruncation开始时显示更多按钮。即每当“ ...”出现时,我需要通过一些操作显示我的更多按钮。

我正在做的是

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 相同的情况下,会显示更多按钮。有什么直接的方法吗?

4

3 回答 3

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
}
于 2012-08-27T12:30:58.957 回答
0

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

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

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

于 2012-08-27T12:40:42.757 回答
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
}
}
于 2012-08-27T12:36:33.383 回答