Bagaimana cara membuat pusat perataan teks UIButton? Menggunakan IB

139

Saya tidak dapat menetapkan judul UIButton menggunakan IB sebagai pusat. Judul saya adalah multi-line.
Memberi seperti ini
masukkan deskripsi gambar di sini

Tapi aku mau yang ini
masukkan deskripsi gambar di sini

Saya telah memberikan ruang dalam hal ini tetapi saya tidak ingin melakukan itu. Karena tidak selaras persis untuk beberapa kasus dan saya tahu ada properti UILabel untuk mengatur perataan tetapi saya tidak ingin menulis kode untuk itu .. hanya ingin mengatur semuanya dari IB.

Terima kasih

Inder Kumar Rathore
sumber
7
Kumar Rathor - coba dengan kodeself.yourButton.titleLabel.textAlignment = UITextAlignmentCenter;
Sagar R. Kothari
1
@Park Saya tahu bagaimana melakukan ini dengan kode tetapi yang saya inginkan adalah mengaturnya menggunakan 'IB'.
Inder Kumar Rathore
Saya tahu, Anda ingin mengaturnya menggunakan IB. Tetapi properti seperti itu hanya dapat diakses melalui kode.
Sagar R. Kothari
Ini dapat diakses melalui IB dengan membuatnya dikaitkan tetapi siapa yang peduli tentang itu!
Youssef Moawad
@YoussefSami ya Anda benar stackoverflow.com/a/5865500/468724
Inder Kumar Rathore

Jawaban:

197

Ini akan membuat persis apa yang Anda harapkan:

Tujuan-C:

 [myButton.titleLabel setTextAlignment:UITextAlignmentCenter];

Untuk iOS 6 atau lebih tinggi

 [myButton.titleLabel setTextAlignment: NSTextAlignmentCenter];

seperti yang dijelaskan dalam jawaban tyler53

Cepat:

myButton.titleLabel?.textAlignment = NSTextAlignment.Center

Swift 4.x dan lebih tinggi

myButton.titleLabel?.textAlignment = .center
RGML
sumber
1
Ini telah menjadi NSTextAlignment di versi iOS selanjutnya.
Sullivan
4
kode ini tidak berfungsi, jawaban terbaik adalah @joetjahmyButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Alberto Mier
8
Pertanyaannya secara eksplisit menyebutkan IB , seperti dalam Interface Builder . Ini bukan jawaban yang benar, karena membutuhkan pengkodean.
SwiftArchitect
1
Swift 4: myButton.titleLabel? .TextAlignment = .center
Lewis Black
'Center' telah diubah namanya menjadi 'center'
ModusPwnens
106

Gunakan garis:

myButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

Ini harus memusatkan konten (horizontal).

Dan jika Anda ingin mengatur teks di dalam label ke tengah juga, gunakan:

[labelOne setTextAlignment:UITextAlignmentCenter];

Jika Anda ingin menggunakan IB, saya punya contoh kecil di sini yang terhubung di XCode 4 tetapi harus memberikan detail yang cukup (juga pikiran, di atas layar properti itu menunjukkan tab properti. Anda dapat menemukan tab yang sama di XCode 3.x): masukkan deskripsi gambar di sini

Joetjah
sumber
1
terima kasih ... tapi saya tidak ingin mengaturnya melalui IB. :( itulah pilihan terakhir saya untuk melakukan itu ...
Inder Kumar Rathore
1
@Inder Kumar Rathore: Tidak masalah. Untuk mengaturnya di IB, Anda harus mengklik label, lalu di Inspektur Atribut, atur Alignment ke "Center". Dalam IB saya (XCode 4), ia memiliki 3 ikon yang menunjukkan perataan teks. Jelas, Anda harus memilih yang di tengah itu.
Joetjah
dapatkah Anda mengirimkan tangkapan layar kepada saya ... Apakah ini label Tombol atau Anda telah menarik label UIL dari perpustakaan ??? Saya kira itu UILabel bukan label tombol
Inder Kumar Rathore
@Inder Kumar Rathore: Hai, lihat screenshot yang saya tambahkan. Saya memang salah mengira jenis label yang Anda gunakan, saya masih memikirkan UILabel alih-alih teks dalam UIButton. Tangkapan layar menunjukkan cara menyelaraskan pada UIButton melalui IB.
Joetjah
1
Tidak akan membiarkan saya mengedit, tetapi NSTextAlignmentCenter telah menggantikan UITextAlignmentCenter. Mereka berarti hal yang persis sama. developer.apple.com/library/iOS/documentation/UIKit/Reference/…
OC Rickard
89

Solusi1

Anda dapat mengatur jalur kunci di storyboard

Setel teks ke judul multiline Anda, misalnya hello + multiline

Anda perlu menekan + untuk memindahkan teks ke baris berikutnya.

masukkan deskripsi gambar di sini

Kemudian tambahkan jalur kunci

titleLabel.textAlignmentas Numberand value 1, 1berarti NSTextAlignmentCenter
titleLabel.numberOfLinesas Numberand value 0, 0berarti sejumlah garis

masukkan deskripsi gambar di sini

Ini tidak akan tercermin pada IB / Xcode, tetapi akan berada di tengah pada saat dijalankan (perangkat / simulator)

Jika Anda ingin melihat perubahan pada Xcode Anda perlu melakukan hal berikut: (ingat Anda dapat melewati langkah-langkah ini)

  1. Subkelas UIButton untuk membuat tombolnya dapat dirancang:

    import UIKit
    @IBDesignable class UIDesignableButton: UIButton {}

  2. Tetapkan subkelas yang dirancang untuk tombol-tombol yang Anda modifikasi:

Menampilkan cara mengubah kelas tombol menggunakan Interface Builder

  1. Jika dilakukan dengan benar, Anda akan melihat pembaruan visual dalam IB ketika status Designables "Up to date" (yang dapat memakan waktu beberapa detik):

Membandingkan tombol yang dirancang dan standar di Interface Builder



Solusi2

Jika Anda ingin menulis kode, maka lakukan proses panjang

1.Buat IBOutletuntuk tombol
2.Tulis kode dalam viewDidLoad

btn.titleLabel.textAlignment = .Center
btn.titleLabel.numberOfLines = 0


Solusi3

Dalam versi xcode yang lebih baru (milik saya adalah xcode 6.1) kami memiliki properti yang dikaitkan dengan judul.
Pilih Attributedkemudian pilih opsi teks dan tekan pusat di bawah ini.

PS Teks itu tidak datang multiline untuk itu saya harus mengatur

btn.titleLabel.numberOfLines = 0

masukkan deskripsi gambar di sini

Inder Kumar Rathore
sumber
Untuk solusi 3, Anda bisa menambahkan Line Breaking = Clip, itu akan mengubah teks menjadi multiline
finx
Solusi 3 memiliki masalah, setidaknya dengan Xcode 11.3.1: ketika saya mengubah judul tombol, itu tidak berfungsi. ketika saya menggunakan btn.titleLabel.textAlignment, itu bekerja dengan baik.
Brian Hong
27

Untuk UIButton Anda harus menggunakan: -

[btn setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
Sirji
sumber
16

Untuk ios 8 dan Swift

btn.titleLabel.textAlignment = NSTextAlignment.Center

atau

btn.titleLabel.textAlignment = .Center

Eduardo Fiorezi
sumber
13

Bagi Anda yang sekarang menggunakan iOS 6 atau lebih tinggi, UITextAlignmentCenter telah ditinggalkan. Sekarang NSTextAlignmentCenter

CONTOH: mylabel.textAlignment = NSTextAlignmentCenter;Berfungsi sempurna.

tyler53
sumber
12

Untuk swift 4, xcode 9

myButton.contentHorizontalAlignment = .center
Shan Ye
sumber
Saya mengatur myButton.titleLabel? .NumberOfLines = 0 dan itu menyebabkan label di dalam tombol menjadi tengah, jadi saya mencoba mencari cara untuk menyelaraskan teks ke kiri di dalam tombol dan ini berhasil, mengaturnya ke .left.
Maksimum
7

Dengan asumsi bahwa btn merujuk pada UIButton, untuk mengubah teks multi-garis menjadi terpusat secara horizontal, Anda dapat menggunakan pernyataan berikut di iOS 6 atau yang lebih baru:

self.btn.titleLabel.textAlignment = NSTextAlignmentCenter;
pengguna1862723
sumber
4

UITextAlignmentCenter sudah tidak digunakan lagi di iOS6

Sebagai gantinya, Anda dapat menggunakan kode ini:

btn.titleLabel.textAlignment=NSTextAlinmentCenter;

vrwim
sumber
Tidak ada properti untuk UIButton callee textAlignment.
Ravi
Tidak ada properti untuk UIButton di iOS
Jayprakash Dubey
Dia berarti button.titleLabel.textAlignment
OC Rickard
4

Untuk Swift 3.0

btn.titleLabel?.textAlignment = .center
Morten Gustafsson
sumber
4

Untuk Swift 4:

@IBAction func myButton(sender: AnyObject) {
    sender.titleLabel?.textAlignment = NSTextAlignment.center
    sender.setTitle("Some centered String", for:UIControlState.normal)
}
Grzegorz R. Kulesza
sumber
gunakan satu "?" di sender.titleLabel? sebagai gantinya "??"
Владимир Ковальчук
3

Sebenarnya Anda bisa melakukannya di pembangun antarmuka.

Anda harus mengatur Judul menjadi "Dikaitkan" dan kemudian pilih perataan tengah.

Alexander Danilov
sumber
Jika dikaitkan, kita tidak dapat mengatur warna teks, font, dll melalui Storyboard.
Vineesh TP
3

Coba Seperti ini:

yourButton.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
yourButton.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;
Polisi
sumber
2

Anda dapat melakukan ini dari storyboard. Pilih tombol Anda. Atur Line Break 'Word Wrap', Tetapkan judul Anda 'Plain' menjadi 'Attributed'. Pilih 'Perataan tengah'. Bagian ini penting => Klik ... (Lainnya) Tombol. Dan pilih mode line breaking ke 'Character Wrap'.

Mustafa Karakuş
sumber
1

UIButton tidak akan mendukung setTextAlignment. Jadi, Anda harus pergi dengan setContentHorizontalAlignment untuk penyelarasan teks tombol

Untuk referensi Anda

[buttonName setContentHorizontalAlignment:UIControlContentHorizontalAlignmentCenter];
btmanikandan
sumber