我有一个多行标签,其中包含以下文字:
这里有很多文字·$$$$
由于开头的文字是自由形式的,有时包装最终看起来像这样:
Lots of text here · $$$
$
如何防止这种情况发生?我希望它看起来像这样:
Lots of text here ·
$$$$
我已经尝试过每一个lineBreakMode都没什么用。自动换行不起作用,因为它不会将$$$$视为单词。
答案 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 $$$
它应该在下一行打印$$$。