Mensejajarkan item UIToolBar

112

Saya memiliki tiga yang UIBarButtonItemdibuat seperti di bawah ini. Mereka sejajar kiri dan saya ingin sejajarkan tengah sehingga tidak ada celah di sisi kanan. Saya tidak melihat properti align pada UIToolBar. Apakah ada cara lain untuk melakukannya?

//create some buttons
UIBarButtonItem *aboutButton = [[UIBarButtonItem alloc] initWithTitle:@"About" style:UIBarButtonItemStyleBordered target:self action:@selector(showAbout:)];
[toolbar setItems:[NSArray arrayWithObjects:settingsButton,deleteButton,aboutButton,nil]];
//Add the toolbar as a subview to the navigation controller.
[self.navigationController.view addSubview:toolbar];
4thSpace
sumber

Jawaban:

259

Tambahkan dua item UIBarButtonSystemItemFlexibleSpace ke toolbar Anda, di kiri dan kanan item Anda

UIBarButtonItem *flexibleSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
[toolbar setItems:[NSArray arrayWithObjects:flexibleSpace, settingsButton,deleteButton,aboutButton, flexibleSpace, nil]];

Menambahkan ini seperti yang Anda lakukan pada item toolbar lainnya akan mendistribusikan ruang secara merata di antara keduanya.

nduplessis
sumber
25
Tidak ada alasan nyata untuk membuat banyak ruang fleksibel. Anda dapat menambahkan beberapa objek ruang fleksibel yang sama ke toolbar Anda beberapa kali jika Anda membutuhkan lebih dari satu.
mmc
mmc benar. Nyatanya, mungkin sangat masuk akal untuk membuat single flexibleSpace dan menggunakannya kembali di seluruh produk Anda. Saya telah mendengar klaim bahwa ini adalah penggunaan asli lajang yang sebenarnya: bukan untuk menegakkan aturan program, tetapi untuk mengurangi biaya overhead.
Amagrammer
2
Anda lupa memperbarui panggilan rilis, harus membaca [flexibleSpace release];
Daniel Hepper
Ya, maaf, ini membaca [rilis flexibleSpaceLeft] bukan [rilis flexibleSpace]. Typo diperbaiki
nduplessis
30

Ini juga dapat dilakukan langsung dari storyboard.

Cukup seret dan lepas item di bilah alat, dan ubah beberapa di antaranya menjadi ruang yang fleksibel atau tetap untuk mendapatkan efek yang diinginkan. Lihat dua contoh di bawah ini.

Spasi secara merata

Tengah

Arnaud
sumber
8

Di Xamarin iOS

Rata kanan:

yourBar.SetItems(new [] { new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace), yourButton }, false);

Tengah Rata:

var flexibleSpace = new UIBarButtonItem(UIBarButtonSystemItem.FlexibleSpace);
yourBar.SetItems(new [] { flexibleSpace, yourButton, flexibleSpace}, false);
Herman Schoenfeld
sumber
5
Ini bukan topiknya. Kami berbicara tentang iOS murni di sini.
jturolla
4
Itulah yang menjadi target MonoTouch.
Herman Schoenfeld
2
Pertanyaan obyektif C bukan MonoTouch / C #
Max MacLeod
6
@MaxMacLeod: ini tidak diberi tag obj-c, itu ditandai iPhone. Oleh karena itu jawaban saya valid. Ini juga bagus untuk membandingkan c # vs obj-c. Jelas, c # itu modern, lebih ramping, lebih bagus, lebih cepat, dan unggul dalam segala hal.
Herman Schoenfeld
12
Meskipun sudah jelas bahwa kode dalam pertanyaan itu adalah Objective-C, saya menemukan jawaban ini membantu. Ini juga pertanyaan peringkat tinggi di Google.
jacob.toye
7

Versi Swift:

    let toolbar = UIToolbar(frame: CGRectMake(0, 0, viewController.view.frame.size.width, 35.0))
    let flexibleSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.FlexibleSpace, target: viewController, action: nil)
    let button1 = UIBarButtonItem(title: "A", style: UIBarButtonItemStyle.Plain, target: viewController, action: foo)
    let button2 = UIBarButtonItem(title: "B", style: UIBarButtonItemStyle.Plain, target: viewController, action: bar)
    let button3 = UIBarButtonItem(title: "C", style: UIBarButtonItemStyle.Plain, target: viewController, action: blah)
    toolbar.items = [button1, flexibleSpace, button2, flexibleSpace, button3]
rgamber
sumber