如何处理长文本xamarin.ios

时间:2018-04-11 06:54:45

标签: xamarin.ios

我需要在一个有3行的标签中显示一个长字符串。

这是我需要展示的内容

enter image description here

myLabel.LineBreakMode = UILineBreakMode.MiddleTruncation;

我怎样才能避免在3点后获得一个角色?

enter image description here

1 个答案:

答案 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;