2010-12-16 6 views
0

UITableViewCellの中に2つのUILabelsがお互いに垂直に位置しているとします。改行モードは、両方ともUILineBreakModeWordWrapに設定されています。動的にサイズ変更されたUILabelsを縦に並べるには?

水平サイズは固定されていますが、表示されるテキストの量に基づいて垂直方向に伸縮できます。重複しないように動的に下位のものを配置するにはどうすればよいですか?

答えて

2

この関数を使用してテキストの高さを取得し、2番目のラベルの高さを結果に設定します。

- (CGFloat)HeightOfText:(NSString *)textToMesure widthOfLabel:(CGFloat)width 
{ 
    UIFont *textFont = [UIFont systemFontOfSize:16]; 
    CGSize ts = [textToMesure sizeWithFont:textFont constrainedToSize:CGSizeMake(width-20.0, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
    return ts.height+25.0; //you can change the last number to fit the space you wish to have between the labels. 
} 

、あなたがそのようにそれを使用する:第2ラベル高さを設定する "TEXTSIZE" を使用し、その後

NSString *firstLabelText = @"the text"; 
CGFloat textSize = [self HeightOfText:firstLabelText widthOfLabel:firstLabel.frame.size.width]; 

願っています。

2

お試しください[UILabel sizeThatFits:]。 300px幅の列にラベルを敷き詰めているとしたら、(300,99999)のサイズを渡すことができ、それが実際にそのテキストに収まるのに必要なサイズを教えてくれます。それを使って調整できますあなたのラベルのフレームを適切に

+0

シャニさん@良い答え 'sizeWithFontので:constrainedToSizeは:lineBreakMode:' UILabelを追加するマージンを含むが、 'sizeToFit'を使用してサイズ自体にUILabelを求めていないだろう – deanWombourne

+0

:)をしますいい視点ね。 Upvoted @ shaniの –

+0

ねえ、答えに感謝します。私はその間に経験しており、私が見つけたのは、 'sizeToFit'メソッドと' sizeWithFont'メソッドは基本的に同じ結果を与えるということです。さらに、 'UILabel'の行数の値を他のポストで概説されているように0に設定することも役立ちます。 – kadam

0

私は下のビューのフレームをリセットすることで同様のことを行っています(すでにsizeWithFontやsizeThatFitsを行い、ラベルのサイズを変更していると仮定します)。これと同様に:

- (void)positionView:(UIView *)aView belowView:(UIView *)anotherView withPadding:(int)padding 
{ 
    CGRect aFrame = aView.frame; 
    if (anotherView) 
    { 
     aFrame = (anotherView.frame.origin.y + anotherView.frame.size.height); 
    } 
    aFrame.origin.y += padding; 
    aView.frame = aFrame; 
} 
関連する問題