我需要在一个有3行的标签中显示一个长字符串。
这是我需要展示的内容
myLabel.LineBreakMode = UILineBreakMode.MiddleTruncation;
我怎样才能避免在3点后获得一个角色?
答案 0 :(得分:0)
当您设置MyLabel.LineBreakMode = UILineBreakMode.MiddleTruncation;
时,它会将您的字符串剪切到中间位置,而不会检测它是否是一个完整的单词。这是设计的。
如果您想要达到效果,我们可以尝试自定义字符串。首先计算弦的高度,然后当我们发现高度符合标签的高度(有三条线)时,将其从最后一个位置切掉。将标签的文本设置为我们刚刚获得的子字符串。
string descriptionStr = "... Tap here to see all.";
MyLabel.LineBreakMode = UILineBreakMode.CharacterWrap;
//Get the real label's height
View.LayoutIfNeeded();
int stringCount = MyLabel.Text.Length;
for (int i = MyLabel.Text.Length; i > 0; i--)
{
//Customize the strings
var str = new NSString(MyLabel.Text.Substring(0, i) + descriptionStr);
//Calculate the height of the string
var attributes = new NSDictionary(UIStringAttributeKey.Font,
MyLabel.Font);
UIStringAttributes attrib = new UIStringAttributes(attributes);
var strRect = str.GetBoundingRect(new CGSize(MyLabel.Frame.Width, 0), NSStringDrawingOptions.UsesLineFragmentOrigin, attrib, null);
//When we find the height fitting the request, get the string
if (strRect.Height < MyLabel.Frame.Height)
{
stringCount = i;
break;
}
}
最后我们可以使用字符串:
MyLabel.Text = MyLabel.Text.Substring(0, stringCount) + descriptionStr;
但是当标签的宽度不够大时,我们需要剪切更多的字符以适应标签的高度。这可能不完美,但我们可以设置一个常数来调整它:
MyLabel.Text = MyLabel.Text.Substring(0, stringCount - constant) + descriptionStr;