2011-01-01 7 views
31

デフォルトのラベルを持つInterface BuilderでUIButtonが構築されています。 Xcodeで、私は動的にそのようなラベルのテキストを変更しています:UIButtonラベルのテキストがクリップされています

myButton.titleLabel.text = @"this is the new label"; 

ただし、テキストの更新は、新しい文字列は元の文字列と同じサイズまでクリップしのように見える終わるされている場合:

this...label 

これはなぜ起こっているのですか?

答えて

56

setTitle:forState:を使用してUIButtonのタイトルを変更する必要があります。

myButton.titleLabel.text = @"this is the new label"; 
[myButton setNeedsLayout]; 

が、私はそれがでうまくいくさえわからない:あなたはこのような何かを持ってしまうだろう - あなたはタイトルを自分で変更した場合、ボタンは、それがラベルのサイズを変更する必要があるという兆候がありませんすべての場合。 setTitle:forState:のようなメソッドが用意されているため、ボタンを手動で更新することなく複数の状態にタイトルを提供したり、新しいタイトルでレイアウトする必要があることをボタンが認識したりすることができます。

+1

。動的ボタンテキストを取得してボタンのtitleLabelをサイズ変更するには、setTitle:forState: –

5

ボタンのsizeToFitに電話してください。これは、テキストに合わせてボタンのサイズを変更します。

1

これでうまくいかない場合は、文字列のサイズを決めることができ、ボタンのフレーム幅を調整できます。その場合、あなたはそれが収まると確信しています。

button.titlelabel.minimumFontSize = 8.0; // or some more adequate size 
self.buttonWithLongTitle.titleLabel.adjustsFontSizeToFitWidth = YES; 
18

別の解決策は、フォントサイズを縮小するUIButtonの内側のUILabelをさせることですラベル)。タイトルラベルのサイズを変更する必要があります。

のObjective C:

[myButton setTitle:@"This is the text" forState:UIControlStateNormal]; 

またはスウィフト中:絶対に

myButton.setTitle("This is the text", for: .normal) 
+0

を使用してください。ボタンは伸びていませんが、少なくともテキストを見ることができます –

+4

注: 'minimumFontSize'は廃止予定です。代わりに 'minimumScaleFactor'を使用してください。私。 'minimumScaleFactor = 1.0;'を使用して縮小を完全に停止する –

+0

これは正解です。特にadjustsFontSizeToFitWidthはOPが探しているメソッドです。 – Dado

22

はボタンののsetTitleメソッドを使用して(というよりも上で直接タイトルを設定してみてください:UILabelsを行うことができますよう

// Calculate the size 
CGSize buttonSize = [@"My text.." sizeWithFont:[UIFont systemFontOfSize:15.0] 
        constrainedToSize:someSize lineBreakMode:UILineBreakModeWordWrap]; 

// Do whatever you want with the "buttonSize", you can for example adjust your button's frame width 
+0

+1は完璧な答えです。私は上記の2つの選択肢のすべてを試しました。しかし、この答えを除いて私の問題を解決することはできませんでした。 –

+0

代わりに、これは私のために完璧に働いた! +1 –

+0

同意します。これは受け入れられるはずです:) +1 –

関連する問題