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的文本宽度相同,则会显示更多按钮。有没有直接的方法呢?
答案 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:
个功能。