2011-08-22 9 views
14

iOSで2,3行のテキストを表示するためにUILabelを使用していますが、テキストを正当なものに整列させたいと考えていますが、これを行うオプションが見つかりません。どのようにラベルのテキストを正当化するための提案?UILabel iOSでテキストを整列する

は、私は、このような任意のトリックはそれが おかげ

をjustfiy作るために作るトップ

CGSize maximumSize = CGSizeMake(300, 9999); 
NSString *textString = someString; 
UIFont *textFont = [UIFont fontWithName:@"Futura" size:14]; 
CGSize textStringSize = [textString sizeWithFont:textFont 
           constrainedToSize:maximumSize 
            lineBreakMode:text.lineBreakMode]; 

CGRect textFrame = CGRectMake(10, 110, 300, textStringSize.height); 
text.frame = textFrame; 

から起動するには、これらのラインを入れて

答えて

31

iOS6以降、テキストを正当化する便利な方法があります。あなたは、NSAttributedStringのインスタンスを作成し、適切なプロパティを設定し、それはこのように簡単です、これはなどUILabel、UITextView、としてビューを表すテキストに文字列を起因割り当てることができます。

  1. はNSMutableParagraphStyleのインスタンスを作成し、そのプロパティを設定します。

    NSMutableParagraphStyle *paragraphStyles = [[NSMutableParagraphStyle alloc] init]; 
    paragraphStyles.alignment = NSTextAlignmentJustified;  //justified text 
    paragraphStyles.firstLineHeadIndent = 10.0;    //must have a value to make it work 
    
  2. テキスト属性のNSDictionaryを作成し、属性付き文字列を作成します。

    NSDictionary *attributes = @{NSParagraphStyleAttributeName: paragraphStyles}; 
    NSAttributedString *attributedString = [[NSAttributedString alloc] initWithString: string attributes: attributes]; 
    
  3. 属性文字列をラベルに設定します。

    existingLabel.attributedText = attributedString; 
    
+1

"paragraphStyles.firstLineHeadIndent = 10.0" それは私が探していたものでした。ありがとう! – Neru

+0

魅力的な作品です!ありがとう! –

4

私は怖い行うことはできません - UILabelとよくありません。

あなたは幸せなコーディング:)

更新などOHAttributedLabel

としてのUIWebViewまたはサードパーティのライブラリを使用することができます。

この答えはiOS6以降廃止されてきました。タンキスタの答えを参照してください。

+3

この解決策は廃止されました、あなたはヘッダファイルにそのためにすべてを持っていることのすべてを行うには、問題を –

0

これは簡単に実行できますが、コアテキストを使用する必要があります。

サブクラスUIView、そしてあなたのdrawRectメソッドで石英またはCoreTextを使用してNSAttributedStringを描き、NSAttributedStringを作成し、kCTParagraphStyleSpecifierAlignmentキーのkCTJustifiedTextAlignment値を渡し、NSStringプロパティを追加します。

編集:kCTParagraphStyleSpecifierAlignmentキーkCTJustifiedTextAlignment値がCTParagraphStyleRef構造体を作成するために使用されるとNSAttributedStringを作成するときにkCTParagraphStyleAttributeNameキーの値として渡す必要があります。

0

@martinに記載されているように、私のクラスOHAttributedLabelはこれを非常に簡単に行うことができます。 (これは私のgithubで見つかるでしょうし、それについての参考文献もたくさんあります)

+1

下記の私の答えをチェックアウトしていません。 NSAttributedString +属性の '' 'setTextAlignment:lineBreakMode:' 'メソッドを使用して、NSAttributedStringにテキストの配置を適用するために使用できる' 'UITextAlignmentJustify''' #define(これは' '' 'kCTJustifiedTextAlignment'''です) .h)。また、リンクをクリック可能にしたくない場合は、そのためのプロパティもあります。 '' 'automaticAddLinksForType = 0'''はURLや電話などのリンクも追加しません。 – AliSoftware

+0

iOS6以降は、ネイティブの 'UILabel'を' NSAttributedString'と併用する方が良いでしょう。 –

+0

@Cœurは完全に合意しました(そのため、OHAttributedLabelは現在のところ推奨されていません)。興味のある人には、新しい[OHAttributedStringAdditions](https://github.com/AliSoftware/OHAttributedStringAdditions)ポッドの便利な 'NSAttributedString'カテゴリをすべて抽出しました。これは' NS(Mutable)AttributedString'オブジェクトをより簡単に操作するのに役立ちますiOS6 +およびTextKitと互換性があります)。 – AliSoftware