การจัดตำแหน่งรายการ UIToolBar


112

ฉันได้UIBarButtonItemสร้างขึ้นสามรายการดังต่อไปนี้ มันจัดชิดซ้ายและฉันต้องการจัดกึ่งกลางเพื่อไม่ให้มีช่องว่างทางด้านขวา UIToolBarฉันไม่เห็นสถานที่ให้บริการในตําแหน่ง มีวิธีอื่นในการทำให้สำเร็จหรือไม่?

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

คำตอบ:


259

เพิ่มสองรายการ UIBarButtonSystemItemFlexibleSpace ในแถบเครื่องมือของคุณทางซ้ายและขวาของรายการของคุณ

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

การเพิ่มสิ่งเหล่านี้เหมือนที่คุณทำกับรายการแถบเครื่องมืออื่น ๆ จะกระจายพื้นที่ระหว่างสองรายการอย่างเท่าเทียมกัน


25
ไม่มีเหตุผลที่แท้จริงที่จะสร้างพื้นที่ยืดหยุ่นหลาย ๆ คุณสามารถเพิ่มออบเจ็กต์พื้นที่ยืดหยุ่นหลายรายการเดียวกันลงในแถบเครื่องมือของคุณได้หลายครั้งหากคุณต้องการมากกว่าหนึ่งชิ้น
mmc

mmc ถูกต้อง ในความเป็นจริงมันน่าจะสมเหตุสมผลอย่างยิ่งที่จะทำให้ซิงเกิลตันมีความยืดหยุ่นและใช้ซ้ำได้ตลอดทั้งผลิตภัณฑ์ของคุณ ฉันเคยได้ยินมาว่านี่เป็นการใช้ singletons ดั้งเดิมที่แท้จริง: ไม่ใช่เพื่อบังคับใช้กฎของโปรแกรม แต่เพื่อลดค่าใช้จ่าย
Amagrammer

2
คุณลืมอัปเดตการเรียกรีลีสควรอ่าน [flexibleSpace release];
Daniel Hepper

ใช่ขออภัยมันอ่าน [flexibleSpaceLeft release] แทนที่จะเป็น [flexibleSpace release] แก้ไขการพิมพ์ผิด
nduplessis

30

ซึ่งสามารถทำได้จากสตอรี่บอร์ด

เพียงลากและวางรายการในแถบเครื่องมือและเปลี่ยนบางรายการให้เป็นพื้นที่ที่ยืดหยุ่นหรือคงที่เพื่อให้ได้เอฟเฟกต์ที่ต้องการ ดูสองตัวอย่างด้านล่าง

เว้นระยะห่างเท่า ๆ กัน

ศูนย์กลาง


8

ใน Xamarin iOS

จัดชิดขวา:

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

จัดกึ่งกลาง:

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

5
นี่ไม่ใช่หัวข้อ เรากำลังพูดถึง iOS ล้วนๆที่นี่
jturolla

4
ซึ่งเป็นสิ่งที่โมโนทัชตั้งเป้าไว้
Herman Schoenfeld

2
คำถามวัตถุประสงค์ C ไม่ใช่ MonoTouch / C #
Max MacLeod

6
@MaxMacLeod: ไม่ได้ติดแท็ก obj-c แต่ติดแท็ก iPhone ดังนั้นคำตอบของฉันถูกต้อง นอกจากนี้ยังเป็นการดีที่จะตัดกัน c # กับ obj-c เห็นได้ชัดว่า c # ทันสมัยเพรียวกว่าสวยกว่าเร็วกว่าและเหนือกว่าในทุกๆด้าน
Herman Schoenfeld

12
แม้ว่าอาจจะชัดเจนว่ารหัสในคำถามคือ Objective-C แต่ฉันพบว่าคำตอบนี้มีประโยชน์ เป็นคำถามอันดับสูงใน Google ด้วย
jacob.toye

7

เวอร์ชัน 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]
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.