我们在做文字信息展示的时候会遇到这种情况:中文+英文(数字),当英文或者数字在行末并且过长的时候,这种情况下系统会默认把整个英文换到下一行展示。这样就会造成上一行显示不满的情况。
如果是UILabel的话直接设置lineBreakMode属性即可:
label.lineBreakMode = UILineBreakModeCharacterWrap;
UILineBreakModeCharacterWrap是系统定义的结构体UILineBreakMode中的成员:
typedef NS_ENUM(NSInteger, UILineBreakMode) {
UILineBreakModeWordWrap = 0, // Wrap at word boundaries
UILineBreakModeCharacterWrap, // Wrap at character boundaries
UILineBreakModeClip, // Simply clip when it hits the end of the rect
UILineBreakModeHeadTruncation, // Truncate at head of line: "...wxyz". Will truncate multiline text on first line
UILineBreakModeTailTruncation, // Truncate at tail of line: "abcd...". Will truncate multiline text on last line
UILineBreakModeMiddleTruncation, // Truncate middle of line: "ab...yz". Will truncate multiline text in the middle
} NS_DEPRECATED_IOS(2_0,6_0) __TVOS_PROHIBITED;
其中:
UILineBreakModeWordWrap = 0,
以单词为单位换行,以单位为单位截断。
UILineBreakModeCharacterWrap,
以字符为单位换行,以字符为单位截断。
UILineBreakModeClip,
以单词为单位换行。以字符为单位截断。
UILineBreakModeHeadTruncation,
以单词为单位换行。如果是单行,则开始部分有省略号。如果是多行,则中间有省略号,省略号后面有4个字符。
UILineBreakModeTailTruncation,
以单词为单位换行。无论是单行还是多行,都是末尾有省略号。
UILineBreakModeMiddleTruncation,
以单词为单位换行。无论是单行还是多行,都是中间有省略号,省略号后面只有2个字符。
但是有很多情况下我们会用到UITextView作为文本显示的控件,如文本点击事件的处理等,而UITextView则没有lineBreakMode这个属性,那我们不妨设置其所要显示的字符的换行模式:需要定义属性字符串并为其添加换行模式:
NSMutableParagraphStyle* linebreak = [[NSMutableParagraphStyle alloc]init];
linebreak.lineBreakMode = NSLineBreakByCharWrapping;
[_attributedString addAttribute:NSParagraphStyleAttributeName value:linebreak range:NSMakeRange (0, _attributedString.length)];
其中NSLineBreakByCharWrapping是另一个结构体NSLineBreakMode中的成员,同UILineBreakMode结构体中的UILineBreakModeCharacterWrap等效。各成员的意义也是一一对应的。