2011-11-14 5 views
3

sizeWithFont:constrainedToSize:lineBreakMode:私に正しい幅が戻ってきていないようです。これらのコードが実行された後、私はラベル内の文字列の一部が切り取られていることを知っています。つまり、手動で数ピクセルをサイズに追加する必要があります。何か不足していますか?sizeWithFont:constrainedToSize:lineBreakMode:正確ではありませんか?

私はUILabelをしました:

theLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, LABELWIDTH, LABELHEIGHT)]; 
theLabel.lineBreakMode = UILineBreakModeWordWrap; 
theLabel.numberOfLines = 0; 
[theLabel setFont:[UIFont fontWithName:@"MarkerFelt-Wide" size:16]]; 
theLabel.textColor = [UIColor blackColor]; 
theLabel.textAlignment = UITextAlignmentLeft; 
theLabel.backgroundColor = [UIColor clearColor]; 

私はプログラム的に以下のものを使用して、ラベルのサイズを変更してみました:私は言うよ

CGSize maximumLabelSize = CGSizeMake(LABELWIDTH, 10000); 

CGSize expectedLabelSize = [someString sizeWithFont:theLabel.font constrainedToSize:maximumLabelSize lineBreakMode:theLabel.lineBreakMode]; 

theLabel.text = someString; 

CGRect newFrame = theLabel.frame; 
newFrame.size.height = expectedLabelSize.height; 
newFrame.size.width = newFrame.size.width+50; 
theLabel.frame = newFrame; 
+1

まず、 'someText'と' someString'は同じでなければなりません。彼らは同じNSStringを指していますか? – john

+0

はいそうです。私はそれをより明確にするために変更を加えました。 – tommi

+0

これはUITableViewCellの内部ですか? – john

答えて

1

[OK]を、よく、最初の事はありますあなたが現在採用していないフレームに対処するいくつかの非常に有用な方法があることを知っています。例えば、あなたのコード、

CGRect newFrame = theLabel.frame; 
newFrame.size.height = expectedLabelSize.height; 
newFrame.size.width = newFrame.size.width+50; 
theLabel.frame = newFrame; 

は、あなたのコードは、それが意図していたとして、あなたはすべてでこれを実行する必要はありません働いていた場合、

CGFloat widthOffset = 50.0f; 
theLabel.frame = CGRectOffset(CGRectInset(theLabel.frame, widthOffset, 0.0f), widthOffset/2.0f, 0.0f); 

しかし、CGGeometryから機能を書き換えることができます。あなたは、以前のコードでは、あなたがtheLabelの幅を変更でした

theLabel.frame = CGRectMake(theLabel.frame.origin.x, theLabel.frame.origin.y, expectedLabelSize.width, expectedLabelSize.height); 

ありませんが期待される幅に一致するように、これも動作するはずです、二つの経路、

[theLabel sizeToFit]; 

を行ったりすることができます。あなたはnewFrame.size.width = newFrame.size.width+50と書いてあり、それはnewFrame.size.width = expectedLabelSize.widthであるはずです。

+0

私はsizeToFitを使用しようとしていますが、ラベルのサイズが常に小さいので、内部のテキストの一部が切り取られる理由はまだわかりません。何か案が? – tommi

関連する問題