Saya mencoba membuat UIButton
yang memiliki dua baris teks di titleLabel-nya. Ini adalah kode yang saya gunakan:
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];
Saat saya coba ini, teksnya hanya muncul di satu baris. Tampaknya satu-satunya cara untuk mencapai lebih dari satu baris teks UIButton.titleLabel
adalah dengan mengatur numberOfLines=0
dan menggunakan UILineBreakModeWordWrap
. Tapi ini tidak menjamin teks menjadi dua baris.
UILabel
Namun, menggunakan polos tidak berhasil:
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];
Adakah yang tahu bagaimana membuat UIButton
karya dengan dua baris? Apakah satu-satunya solusi untuk membuat terpisah UILabel
untuk menampung teks, dan menambahkannya sebagai subview dari tombol?
objective-c
ios
uibutton
uilabel
pemasar
sumber
sumber
numberOfLines=0
dan menggunakanUILineBreakModeWordWrap
, Anda bisa mendapatkan banyak baris. Masalahnya adalah itu bisa memberi lebih dari dua baris jika teksnya terlalu panjang. Saya ingin tepat dua lones dengan elips di akhir baris kedua (jika teksnya terlalu panjang).Jawaban:
Jawaban yang diperbarui untuk versi iOS yang lebih baru
Karena ini adalah jawaban yang diterima, tambahkan jawaban @ Sean di sini:
Setel properti ini pada label judul tombol Anda.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0
Swift 3 dan 4:
button.titleLabel?.lineBreakMode = .byWordWrapping button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0
Jawaban asli untuk versi iOS yang lebih lama
Jika Anda ingin 2 baris teks di atas Anda,
UIButton
Anda harus menambahkan aUIlabel
di atasnya yang melakukan hal itu.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.
Diperbarui untuk solusi pembuat antarmuka
Ditambahkan jawaban @Borut Tomazin untuk jawaban yang lebih lengkap. Memperbarui bagian ini lagi sejak jawaban @Borut Tomazin ditingkatkan.
Anda dapat melakukan ini dengan lebih mudah, tanpa perlu kode. Dalam Interface Builder, atur
Line Break
UIButton keWord Wrap
. Daripada Anda dapat memasukkan beberapa baris judul. Tekan sajaOption + Return
tombol untuk membuat baris baru. Anda juga perlu menambahkan ini ke Atribut Waktu Proses yang Ditentukan Pengguna di Pembuat Antarmuka:titleLabel.textAlignment Number [1]
sumber
UILineBreakMode
tidak digunakan lagi, gunakanNSLineBreakMode
sebagai gantinyaAnda tidak perlu menambahkan UILabel ke UIButton. Itu hanya objek dan pekerjaan ekstra.
Setel properti ini pada label judul tombol Anda.
button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0
Cepat:
button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0
sumber
intrinsicContentSize
, yang masih mengembalikan ketinggian yang hanya sesuai dengan satu baris teks. Saya memperbaikinya dengan mengganti tombolintrinsicContentSize
tempat saya mengatur ketinggian[self.titleLabel sizeThatFits(CGSizeMake(self.titleLabel.frame.size.width, CGFLOAT_MAX)].height
.Anda dapat melakukan ini dengan lebih mudah, tanpa perlu kode. Dalam Interface Builder, atur
Line Break
UIButton keWord Wrap
. Daripada Anda dapat memasukkan beberapa baris judul. Tekan sajaOption + Return
tombol untuk membuat baris baru. Anda juga perlu menambahkan ini ke Atribut Waktu Proses yang Ditentukan Pengguna di Pembuat Antarmuka:titleLabel.textAlignment Number [1]
Sesederhana itu. Semoga membantu ...
sumber
titleLabel.textAlignment
Atribut Waktu Proses yang Ditentukan Pengguna di Interface Builder dan menyetelnya ke Number = 1 (nilai NSTextAlignmentCenter).button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; button.titleLabel.textAlignment = NSTextAlignmentCenter; [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
sumber
NSString
dalamnyasetTitle
. `` WordWrapping '' melakukan ini untuk Anda!Untuk menghindari sepenuhnya kebutuhan untuk mengedit kode, dan dengan demikian kebutuhan untuk subclass tampilan Anda, di Xcode5 dan yang lebih baru, Anda dapat mengikuti saran Borut Tomazin:
lalu, di Atribut Waktu Proses yang Ditentukan Pengguna Anda dapat menambahkan
Jalur kunci:
titleLabel.textAlignment
Jenis:
Number
Nilai:
1
Catatan: ini mungkin tidak sepenuhnya "bukti masa depan" karena kami sedang menerjemahkan
UITextAlignmentCenter
konstanta ke dalam nilai numeriknya (dan konstanta tersebut dapat berubah saat versi iOS baru dirilis), tetapi tampaknya aman dalam waktu dekat.sumber
Anda dapat mengubah nilai yang dibutuhkan langsung dari Storyboard. Pilih tombol, buka inspektur identitas dan tambahkan pasangan nilai kunci berikut di bagian "Atribut waktu proses yang ditentukan pengguna":
sumber