防止UILabel包含字符包装符号

时间:2015-03-12 00:21:52

标签: ios uikit uilabel

我有一个多行标签,其中包含以下文字:

  

这里有很多文字·$$$$

由于开头的文字是自由形式的,有时包装最终看起来像这样:

Lots of text here · $$$
$

如何防止这种情况发生?我希望它看起来像这样:

Lots of text here ·
$$$$

我已经尝试过每一个lineBreakMode都没什么用。自动换行不起作用,因为它不会将$$$$视为单词。

3 个答案:

答案 0 :(得分:3)

似乎您可能会受益于子类化UILabel,它会以NSLineBreakByWordWrapping换行模式对字符串进行不同的处理,这会将您的拼音单词视为单词。您将有效地扩展自定义linebreakmode认为单词的定义。

你必须推出自己的换行算法。确定换行符位置的方法类似于以下内容:

  • 遍历字符串,获取每个字符,直到满足以下两个条件之一:a)您已达到视图的宽度,或b)您已到达空格,并且下一个单词(分隔)通过空格)不适合在同一条线上。

  • 如果您已达到条件a,则有两个选项 - 您可以采用从不将单词拆分为多行的策略,或者您只能将非拆分规则应用于您的语音单词。无论哪种方式,当给定行上没有空间时,您需要在拼音单词的开头插入换行符。

  • 您可能希望使用两个单独的字符串,以使源字符串与包含格式的显示字符串分开。

如果有帮助,请告诉我!

答案 1 :(得分:2)

这可能很晚,但至少它可以帮助某人。 我这样做的方式如下:

UIFont *fontUsed = [UIFont systemFontOfSize:17];
NSDictionary *dictFont = [NSDictionary dictionaryWithObject:fontUsed forKey:NSFontAttributeName];

NSString *strTextToShow = @"text that has to be displayed but without $$$$";
CGRect rectForSimpleText = [strTextToShow boundingRectWithSize:CGSizeMake(154, 258) options:NSStringDrawingUsesLineFragmentOrigin attributes:dictFont context:nil];

NSString *strTextAdded = [NSString stringWithFormat:@"%@ $$$$", strTextToShow];
CGFloat oldHeight = rectForSimpleText.size.height;

CGRect rectForAppendedText = [strTextAdded boundingRectWithSize:CGSizeMake(154, 258) options:NSStringDrawingUsesLineFragmentOrigin attributes:dictFont context:nil];
CGFloat newHeight = rectForAppendedText.size.height;

if (oldHeight < newHeight) {
    strTextAdded = [strTextAdded stringByReplacingOccurrencesOfString:@"$$$$" withString:@"\n$$$$"];
}

[lblLongText setText:strTextAdded];

lblLongText 这里是IBOutlet的{​​{1}},UILabel是我用过的CGSizeMake(154, 258)的大小。如果您找到其他任何方式,请告诉我。

答案 2 :(得分:1)

尝试在输入文本中插入换行符。

这里有很多文字·\ n $$$

它应该在下一行打印$$$。