4

フォーマットされた領域でテキストを表示するために、demoLblと呼ばれるOHAttributedLabelを使用します。このラベルはInterfaceBuilderでレイアウトされ、ViewControllerのプロパティに接続されています。attributedTextをラベルに設定した後、すべてのテキストをラベルに表示したいと思います。
ラベルのサイズを変更しないと、ラベルの最後でテキストがトリミングされるため、残りのテキストが失われます。

[demoLblsizeToFit]を使用する場合; 次に、ラベルの高さの高さがテキストよりも大きいか小さいか(約10ポイント、テキストの長さによって異なります)、ビューの下部に空白の領域が表示され(スクロール後)、ラベルの幅が次のように増加します。約2点。

NSAttributedStringに配置してラベルのattributedTextプロパティに追加する前に、元のテキスト(NSString)の高さを計算すると、計算された高さがラベルの高さとして設定するには小さすぎます。

NSAttributedStringの高さに応じてラベルの高さが調整されるように適用できるハックやトリックはありますか?

PS:具体的には、タグとしてOHAttributedLabelを追加したかったのですが、まだ許可されていません。

4

3 に答える 3

10

私は OHattributedLabel の作成者です。

最近、サイズの計算についていくつかの修正を行いました。おそらくあなたの問題を解決するでしょう。

sizeConstrainedToSize:fitRange:また、指定された NSAttributedString の CGSize を返すinという名前のメソッドを追加しましたNSAttributedString+Attributes.h(UIKit のsizeWithFont:constrainedToSize:動作とまったく同じ方法ですが、属性付き文字列と CoreText に対してであり、UIKit を単純な文字列ではありません)。実際には、OHAttributedLabel の sizeThatFits: がこのメソッド自体を呼び出します。

于 2011-08-22T06:34:00.350 に答える
1

このコードをOHAttributedLabelクラスの実装に追加しました。

// Toni Soler - 02/09/2011
// Overridden of the UILabel::sizeToFit method
- (void)sizeToFit
{
    // Do not call the standard method of the UILabel class, this resizes the frame incorrectly
    //[super sizeToFit];

    CGSize constraint = CGSizeMake(self.frame.size.width, 20000.0f);
    CGRect frame = self.frame;
    frame.size = [self sizeThatFits:constraint];
    [self setFrame:frame];
}
// End Toni Soler - 02/09/2011

コードを共有してくれてありがとうOlivier!

于 2011-09-02T10:28:33.663 に答える
1

このカテゴリがより信頼できる高さを提供するかどうかを確認できます。 https://gist.github.com/1071565

使用法

attrLabel.frame.size.height = [attrLabel.attributedString boundingHeightForWidth:attrLabel.frame.size.width];
于 2011-07-08T10:47:32.523 に答える