Căn chỉnh các mục UIToolBar


112

Tôi có ba UIBarButtonItemtạo như dưới đây. Họ căn chỉnh bên trái và tôi muốn căn giữa để không có khoảng trống ở bên phải. Tôi không thấy thuộc tính căn chỉnh trên UIToolBar. Có cách nào khác để thực hiện điều này không?

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

Câu trả lời:


259

Thêm hai mục UIBarButtonSystemItemFlexibleSpace vào thanh công cụ của bạn, ở bên trái và bên phải của các mục của bạn

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

Việc thêm các mục này như bạn làm với bất kỳ mục nào khác trên thanh công cụ sẽ phân bổ không gian đồng đều giữa hai mục đó.


25
Không có lý do thực sự để tạo nhiều không gian linh hoạt. Bạn có thể thêm nhiều lần cùng một đối tượng không gian linh hoạt vào thanh công cụ của mình nếu bạn cần nhiều hơn một.
mmc

mmc là đúng. Trên thực tế, có lẽ sẽ là hoàn toàn hợp lý nếu bạn tạo một không gian singleton linh hoạt và sử dụng lại nó trong toàn bộ sản phẩm của bạn. Tôi đã nghe nó tuyên bố rằng đây là cách sử dụng ban đầu thực sự của các singleton: không phải để thực thi các quy tắc chương trình, mà để giảm chi phí.
Amagrammer

2
Bạn quên cập nhật lệnh gọi phát hành, nên đọc [bản phát hành không gian linh hoạt];
Daniel Hepper

Vâng, xin lỗi, nó đọc [bản phát hành flexSpaceLeft] thay vì [bản phát hành không gian linh hoạt]. Đã sửa lỗi đánh máy
nduplessis

30

Điều này cũng có thể được thực hiện ngay từ bảng phân cảnh.

Chỉ cần kéo và thả các mục trong thanh công cụ, và biến một số trong số chúng thành không gian linh hoạt hoặc cố định để có được hiệu quả mong muốn. Xem hai ví dụ dưới đây.

Cách đều nhau

Căn giữa


8

Trong Xamarin iOS

Sắp xếp đúng:

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

Trung tâm liên kêt:

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

5
Đây không phải là chủ đề. Chúng tôi đang nói về iOS thuần túy ở đây.
jturolla

4
Đó là mục tiêu của MonoTouch.
Herman Schoenfeld

2
Mục tiêu C câu hỏi không MonoTouch / C #
Max MacLeod

6
@MaxMacLeod: nó không được gắn thẻ obj-c, nó được gắn thẻ iPhone. Do đó câu trả lời của tôi là hợp lệ. Tương phản c # vs obj-c cũng rất tốt. Rõ ràng, c # hiện đại hơn, mỏng hơn, đẹp hơn, nhanh hơn và vượt trội hơn về mọi mặt.
Herman Schoenfeld

12
Mặc dù có thể rõ ràng rằng mã trong câu hỏi là Objective-C, nhưng tôi thấy câu trả lời này hữu ích. Đây cũng là một câu hỏi xếp hạng cao trong Google.
jacob.toye

7

Phiên bản 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]
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.