2014-01-13 41 views
6

我想在一個矩形內的多行上繪製橢圓化文本。多行文本沒有被省略掉

NSLineBreakByTruncatingTail對於,文檔指出

顯示行,以便開始在所述容器配合,並在該行的末尾丟失文本由省略號指示字形。雖然此模式適用於多行文本,但它更常用於單行文本。

,但與模式,我只得到了一行:

With NSLineBreakByTruncatingTail

NSLineBreakByWordWrapping

但是,我沒有得到一個省略號爲超長文本:

With NSLineBreakByWordWrapping

這兩個圖片使用下面相同的代碼(紅色背景是文字繪製矩形),當然是相同的矩形大小,所以2行應該d無限適合。

NSMutableParagraphStyle* paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
paragraphStyle.lineBreakMode = <<see above>>; 
paragraphStyle.alignment = NSTextAlignmentNatural; 
NSDictionary* drawingAttributes = [NSDictionary dictionaryWithObjectsAndKeys: 
            [UIFont fontWithName:@"HelveticaNeue" size:36], 
            NSFontAttributeName, 
            paragraphStyle, 
            NSParagraphStyleAttributeName, 
            nil]; 

const CGRect rect = CGRectMake(...); 
[@"I do not get ellipsized in any way" drawInRect:rect withAttributes:drawingAttributes]; 

有沒有一種方法結合起來用多渲染ellipsizing,因爲文件說?使用UILabel,我只需要將行數設置爲1以外的值,但通過代碼渲染文本又如何呢?

+0

我相信多行意味着...一個滾動條。你想要2行文本框。所以你可以創建兩個textField,一個正常的另一個截斷尾巴。 –

+0

這不是關於UI控件,而是關於通過代碼進行文本呈現! – AndiDog

+0

是的,但文字將在一些用戶界面中呈現。而唯一的用戶界面將以任一方式顯示。如果你有兩個UI,那麼這可以完成。或者你可能需要用這個requiremnt創建一個自定義的UI。 –

回答

1

我不明白你爲什麼使用NSMutableParagraphStyle和drawInRect,可能我需要更多關於你正在嘗試工作的上下文的信息。

但使用這個簡單的技術:

UILabel *label = [[UILabel alloc] initWithFrame:(CGRect){0,0,300,100}]; 
label.numberOfLines = 0; 
label.backgroundColor = [UIColor redColor]; 
label.center = self.view.center; 
label.font = [UIFont fontWithName:@"HelveticaNeue" size:36]; 
label.textAlignment = NSTextAlignmentNatural; 
label.lineBreakMode = NSLineBreakByTruncatingTail; 
label.text = @"I do not get ellipsized in any way"; 

[self.view addSubview:label]; 

您將看到以下結果: enter image description here

我的建議是在這種情況下襬脫drawInRect的。