2016-07-18 7 views
5

私は段落を描画したいので(CTFrameDrawまたはctlinedrawを使っていると思います)、定義された領域(rect)に収まらない場合は、テキストを切り捨てる必要があります。通常、省略記号(すなわち、 '...'という文字)を追加することで、最後の行をトリミングします。 '... [+]'のような特殊な文字でこれを行う方法インデント(ピクセル単位)を最初の行に指定する方法を知りたい場合は、IOS段落の最後の表示行を省略記号で切り捨てる方法は?

と終了するのをlinespacing は、私がテストプロジェクトでviewDidLoad

答えて

0

次のコードをコピーし(それが定義された領域よりも多分小さいです)、正確に完全な段落をフィットする正確な最終RECTを知っておく必要があります。省略記号の後[+]については

// Set the size of the area the paragraph will be drawn in. 
CGSize sizeOfTextArea = CGSizeMake(200.0f, 100.0f); 

// Sample text and views. 
NSString *text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."; 
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(100, 100, sizeOfTextArea.width, sizeOfTextArea.height)]; 
imageView.backgroundColor = [UIColor whiteColor]; 
[self.view addSubview:imageView]; 
self.view.backgroundColor = [UIColor blackColor]; 
CGRect textRect = imageView.frame; 
UIButton *moreBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
moreBtn.frame = CGRectMake(CGRectGetMaxX(textRect)-45, CGRectGetMaxY(textRect), 45, 20); 
[moreBtn setTitle:@"more" forState:UIControlStateNormal]; 
[self.view addSubview:moreBtn]; 

// Create a paragraph style and add it to attributed text options. 
NSMutableParagraphStyle *style = [[NSParagraphStyle defaultParagraphStyle] mutableCopy]; 
style.firstLineHeadIndent = 10.0f; // <- CHANGE THIS TO ADJUST INDENT 
style.lineSpacing = 10.0f;   // <- CHANGE THIS TO ADJUST LINE SPACING 
NSDictionary *attributes = @{NSParagraphStyleAttributeName : style}; 

// Render the text 
// The options set the text to word-wrap and to add an ellipsis if needed. 
UIGraphicsBeginImageContext(sizeOfTextArea); 
NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:attributes]; 
[attributedText drawWithRect:CGRectMake(0, 0, sizeOfTextArea.width, sizeOfTextArea.height) 
        options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingTruncatesLastVisibleLine 
        context:nil]; 
UIImage *renderedText = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

// Display the rendered text. 
imageView.image = renderedText; 

// Calculate the rect for the full text. We fix the width and let iOS calculate the height. 
CGRect fullTextRect = [attributedText boundingRectWithSize:CGSizeMake(sizeOfTextArea.width, CGFLOAT_MAX) 
                options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading 
                context:nil]; 
NSLog(@"full rect: %@", NSStringFromCGRect(fullTextRect)); 

// Show/hide more button depending on whether there's more text to show 
moreBtn.hidden = CGRectGetHeight(fullTextRect) <= sizeOfTextArea.height; 

、代わりに(私が何を意味するか確認するために上記のコードを参照)を表示するテキストがありますかどうかに応じて表示または非表示を取得しますテキストの後に「もっと」ボタンを追加します。この.UようなあなたのUIelementラベルやボタンのコードの上とに

+0

ありがとうございますjp2gしかし、私は '...'のようなもので置き換える方法を理解していません。 – loki

+0

@loki:サンプルコードを更新して、「more」ボタンを追加しました。 – jp2g

+0

私はあなたのやり方を見て、実際にはテキストの上部にボタンを配置します(これはアイデアですが、テキストが途中で切り捨てられるため、美しい結果を返すことはありません。チャット:( – loki

0
NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc] init]; 
    paragraph.lineBreakMode = NSLineBreakByTruncatingTail; 
    [attributedString addAttribute:NSParagraphStyleAttributeName value:paragraph range:NSMakeRange(0, [attributedString length])]; 
    descriptionLabel.attributedText = attributedString; 

使用すると、最後の行で楕円を取得します。そして私はまた、最後に文字列を追加しようとしていますが、私はdidnot。限られた領域では、ラベルには適切な情報が残っているため、残っているのは隠されています。その行では楕円以外は何も試していません。

関連する問題