2016-03-31 13 views
0

似たようなトピックがあることは知っていますが、残念ながらその解決策は私が望むようには機能しません。私は特定のフォントを持つラベルを持っています。左辺の制約は16、右辺の制約は16です。だから、私はこれを使用する計算期待テキストの高さ:自動レイアウトでラベルサイズを正しく計算する方法

CGSize labelSize = [[strMod fineHtmlFromString:mdl.content] sizeWithFont:self.contentLabel.font 
                   constrainedToSize:CGSizeMake(SCREEN_WIDTH - 32, (FLT_MAX)) 
                    lineBreakMode:NSLineBreakByWordWrapping]; 

     self.heightFullSizeLabel = labelSize.height; 

32簡単に16 + 16として計算される数、(制約インデント)です。 SCREEN_WIDTHは#define SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width

と定義されています。残念なことに、そのロジックでは、私は望む高さが低くなるため、32を40に増やす必要がありました。レイアウトでラベルの高さを動的に正確に計算する方法はありますか?

+0

なぜ高さを計算しますか? – Shai

+0

メインスクロールの最終的な高さを計算します。 –

答えて

1

テキストコンテナのサイズを知るための正しい方法は-sizeToFit-sizeThatFits:(CGSize)sizeを使用することです。
あなたが使用しているのは、テキストが占める領域だけを要求しますが、適用できるパディングやその他のビュー関連のものは考慮していません。
両側にたくさんのパディングが含まれているUItexViewを使用すると計算量に大きな違いが見られます

+0

あなたのコードスニペットを修正していただきありがとうございます。とても親切ですか? –

+0

これは難しくありません。ラベルにテキストを追加するだけです。sizeToFitまたはsizeThatFitsを送信し、その後にラベルの境界を読み取り、self.heightFullSizeLabelを設定します。 – Andrea

+0

あなたは[label sizeToFit]を追加するだけでよいことを意味します。私の宣言の後に? –

1

ラベルのフォントで試してみてください。

CGRect textRect = [text boundingRectWithSize:size 
            options:NSStringDrawingUsesLineFragmentOrigin 
            attributes:@{NSFontAttributeName:FONT} 
            context:nil]; 

    CGSize size = textRect.size; 
    self.heightFullSizeLabel = size.height;