UIToolBar öğelerini hizalama


112

UIBarButtonItemAşağıdaki gibi üç tane oluşturdum. Sola hizalıyorlar ve sağ tarafta boşluk kalmaması için ortaya hizalamak istiyorum. Üzerinde hizalama özelliği göremiyorum UIToolBar. Bunu başarmanın başka bir yolu var mı?

//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];

Yanıtlar:


259

Araç çubuğunuza, öğelerinizin soluna ve sağına iki UIBarButtonSystemItemF ElasticSpace öğesi ekleyin

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

Bunları diğer herhangi bir araç çubuğu öğesinde yaptığınız gibi eklemek, ikisi arasında eşit bir alan dağıtacaktır.


25
Birden çok esnek alan yapmak için gerçek bir neden yok. Birden fazlasına ihtiyacınız varsa, aynı çoklu esnek uzay nesnesini araç çubuğunuza birden çok kez ekleyebilirsiniz.
mmc

mmc doğrudur. Aslında, tekil bir esnek Alan yapmak ve onu ürününüzün tamamında yeniden kullanmak muhtemelen tamamen mantıklı olacaktır. Bunun tekillerin gerçek orijinal kullanımı olduğunu iddia ettiğini duydum: program kurallarını uygulamak değil, genel giderleri azaltmak için.
Amagrammer

2
Sürüm çağrısını güncellemeyi unuttunuz, [flexibleSpace release] okumalısınız;
Daniel Hepper

Evet, üzgünüm, [flexibleSpace sürümü] yerine [flexibleSpaceLeft release] i okuyor.
Yazım hatası

30

Bu, doğrudan bir film şeridinden de yapılabilir.

İstediğiniz efekti elde etmek için araç çubuğundaki öğeleri sürükleyip bırakın ve bazılarını esnek veya sabit alana dönüştürün. Aşağıdaki iki örneğe bakın.

Eşit aralıklı

ortalanmış


8

Xamarin iOS'ta

Sağa hizalanmış:

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

Ortaya Hizalanmış:

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

5
Konu bu değil. Burada saf iOS'tan bahsediyoruz.
jturolla

4
MonoTouch'ın hedeflediği şey budur.
Herman Schoenfeld

2
Amaç C sorusu MonoTouch / C # değil
Max MacLeod

6
@MaxMacLeod: obj-c etiketli değil, iPhone etiketli. Bu nedenle cevabım geçerlidir. Ayrıca c # ile obj-c arasındaki karşılaştırmada da iyidir. Açıkçası, c # her yönden modern, daha ince, daha güzel, daha hızlı ve üstün.
Herman Schoenfeld

12
Sorudaki kodun Objective-C olduğu açık olsa da, bu cevabı yararlı buldum. Bu, Google'da da yüksek rütbeli bir soru.
jacob.toye

7

Swift versiyonu:

    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]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.