1. ホーム
  2. objective-c

[解決済み] タイトルに2行のテキストを含むUIButton (numberOfLines=2)

2023-04-06 18:22:51

質問

私は UIButton を作成しようとしています。そのtitleLabelには2行のテキストがあります。これは私が使っているコードです。

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のためのオリジナルアンサー

の上に2行のテキストが必要な場合、そのテキストは 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 で Line Break をUIButtonの Word Wrap . これで、複数行のタイトルを挿入することができます。ただ Option + Return キーを押すだけで、新しい行を作ることができます。また、Interface BuilderのUser Defined Runtime Attributeにこれを追加する必要があります。

titleLabel.textAlignment Number [1]