Objective-C文字换行方式(解决英文在行末时的换行问题)

本文介绍了在Objective-C中,如何处理英文在行末时的换行问题,特别是对于UILabel和UITextView。通过设置UILabel的lineBreakMode属性为UILineBreakModeCharacterWrap,可以实现以字符为单位的换行。然而,对于没有lineBreakMode属性的UITextView,可以通过设置其显示的字符串的换行模式来达到相同效果,使用NSLineBreakByCharWrapping来实现字符级别的换行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在做文字信息展示的时候会遇到这种情况:中文+英文(数字),当英文或者数字在行末并且过长的时候,这种情况下系统会默认把整个英文换到下一行展示。这样就会造成上一行显示不满的情况。
如果是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等效。各成员的意义也是一一对应的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值