TitleLabelに2行のテキストがあるUIButton
を作成しようとしています。これは私が使用しているコードです:
UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
[titleButton setTitle:@"This text is very long and should get truncated at the end of the second line" forState:UIControlStateNormal];
titleButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
titleButton.titleLabel.numberOfLines = 2;
[self addSubview:titleButton];
これを試すと、テキストは1行にしか表示されません。 UIButton.titleLabel
で複数行のテキストを実現する唯一の方法は、numberOfLines=0
を設定してUILineBreakModeWordWrap
を使用することです。しかし、これはテキストが正確に2行であることを保証するものではありません。
ただし、プレーンUILabel
を使用しても機能します。
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[self addSubview:titleLabel];
UIButton
を2行で動作させる方法を知っている人はいますか?テキストを保持する別個のUILabel
を作成し、ボタンのサブビューとして追加する唯一のソリューションですか?
最新のiOSバージョンの更新された回答
これは受け入れられた答えなので、@ Seanの答えをここに追加しました。
これらのプロパティをボタンのtitleLabelに設定します。
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0
Swift 3および4:
button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0
iOSの古いバージョンの元の回答
UIButton
の上に2行のテキストが必要な場合、その上に正確にそれを行うUIlabel
を追加する必要があります。
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[myButton addSubview:titleLabel]; //add label to button instead.
インターフェイスビルダーソリューション用に更新
より完全な回答のために、@ Borut Tomazinの回答を追加しました。 @Borut Tomazinの回答が改善されたため、この部分を再度更新しました。
コードを必要とせずに、これをより簡単に行うことができます。 Interface Builderで、UIButtonのLine Break
をWord Wrap
に設定します。複数行のタイトルを挿入できるよりも。 Option + Return
キーを押すだけで新しい行が作成されます。また、Interface Builderのユーザー定義ランタイム属性にこれを追加する必要があります。
titleLabel.textAlignment Number [1]
UILabelをUIButtonに追加する必要はありません。それはただの余分なオブジェクトと仕事です。
これらのプロパティをボタンのtitleLabelに設定します。
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0
迅速:
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping
button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0
コードを必要とせずに、これをより簡単に行うことができます。 Interface Builderで、UIButtonのLine Break
をWord Wrap
に設定します。複数行のタイトルを挿入できるよりも。 Option + Return
キーを押すだけで新しい行が作成されます。また、Interface Builderのユーザー定義ランタイム属性にこれを追加する必要があります。
titleLabel.textAlignment Number [1]
とても簡単です。それが役に立てば幸い...
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
Xcode5以降では、コードを編集する必要性、したがってビューをサブクラス化する必要性を完全に回避するには、Borut Tomazinの提案に従うことができます。
Interface Builderで(またはストーリーボード)改行をワードラップに設定します。複数行のタイトルを挿入できるよりも。打つだけ Option + Return 新しい行を作成するキー。
そして、ser Defined Runtime Attributesで追加できます
キーパス:titleLabel.textAlignment
タイプ:Number
値:1
注:UITextAlignmentCenter
定数を数値に変換しているため(これは新しいiOSバージョンがリリースされると変更される可能性があるため)、これは完全に「将来の証拠」ではありません。しかし、近い将来には安全と思われます。