1. 程式人生 > >Objective-C文字換行方式(解決英文在行末時的換行問題)

Objective-C文字換行方式(解決英文在行末時的換行問題)

我們在做文字資訊展示的時候會遇到這種情況:中文+英文(數字),當英文或者數字在行末並且過長的時候,這種情況下系統會預設把整個英文換到下一行展示。這樣就會造成上一行顯示不滿的情況。
如果是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等效。各成員的意義也是一一對應的。