2011-02-09 35 views
5

Tôi đang cố gắng tìm ra một cách rõ ràng để làm cho một UIToolbar chỉ rộng như nó cần phải được để phù hợp với các mục mà nó chứa. Có cách nào để thực hiện:Kích thước thanh UIToolbar để phù hợp với các mục của nó?

  • Định cấu hình UIToolbar để tự động điều chỉnh chiều rộng khi các mục của nó bị thay đổi?
  • Lập trình xác định chiều rộng tối thiểu theo yêu cầu của các mục, sau đó có thể được sử dụng để đặt khung của UIToolbar?

Tôi đã không thể để con số này ra do khoảng cách giữa các mặt hàng và thực tế là UIBarButtonItem s không UIView lớp con.

Trả lời

0

Tôi vừa kiểm tra tài liệu và có vẻ như UIBarButtonItems, mặc dù chúng không phải là lớp con UIView, chúng có thuộc tính width. Tôi đã không thử nó bản thân mình, nhưng tôi nghĩ rằng bạn có thể tổng hợp chiều rộng của mỗi mục, bao gồm cả các mặt hàng linh hoạt, và nhận được chiều rộng cho thanh công cụ của bạn. Hy vọng điều đó sẽ hữu ích! ;)

+4

Tôi khá chắc chắn rằng chiều rộng là 0 trừ khi được đặt rõ ràng. –

2

Sau khi thử một số gợi ý từ câu trả lời khác mà không làm việc trừ khi tôi sử dụng quan điểm tuỳ chỉnh, hoặc trừ khi tất cả mọi thứ đã được nạp, tôi cuối cùng đã đến một cách để thiết lập chiều rộng thanh công cụ dựa trên các mục của nó:

//Add bar items to toolbar first. 

UIView* v = toolbar.subviews.lastObject; 
float newWidth = v.frame.origin.x + v.frame.size.width; 

//Set toolbar width 

Bạn cần ghi đè UIToolbar -setItems: hoặc phát hiện các nút đã thay đổi để tự động hóa.

Tôi đã bao gồm tính năng này trong thư viện sắp xếp lại, es_ios_utils, để đặt mục bên phải của mục điều hướng có nhiều nút. Trong liên kết trước, hãy xem UIToolbar +toolbarWithItems:UINavigationItem -setRightBarButtonItems.

+0

Không có phụ đề nào trên thanh 'UIToolbar'. – Dmitry

+0

@Dmitry, 'UIToolbar' kế thừa từ' UIView', thực sự có 'subviews'. –

+0

Trên SDK 11 tôi có thể thấy rõ các mục có 0 bản xem trước. – Dmitry

0

Swift 3, 4 update

Tôi có thanh công cụ với barButtonItem được tạo bằng hình ảnh. Tất cả những gì tôi cần làm là tính tổng chiều rộng của ảnh cộng với khoảng thời gian (lề.)

Lề theo mặc định là 11 chiều rộng. Mã sẽ là:

let width: CGFloat = YourBarButtonItemList.reduce(0) {sofar, new in 
    if let image = new.image { 
     return sofar + image.size.width + 11 
    } else { 
     return sofar + ADefaultValueIfThisDoesntWork + 11 
    } 
} 
Các vấn đề liên quan