2011-11-27 34 views
5

Sau khi tạo một giao diện tùy chỉnh và gán nó cho thuộc tính navigationItem.titleView nó được hiển thị như thế nàyLàm cách nào để xác định kích thước/khung của UINavigationItem.titleView tùy chỉnh?

enter image description here

với quan điểm tùy chỉnh lấp đầy khoảng trống giữa hai nút. Do đó, chế độ xem tùy chỉnh không được căn giữa trên thanh điều hướng. Làm cách nào để xác định khung của chế độ xem trong thuộc tính .titleView? Tôi muốn căn giữa một số văn bản trong thanh điều hướng, nói theo dấu thời gian.

Trả lời

14

Nếu bạn thực sự muốn có được khung titleView 's (theo quan điểm của cấp cao nhất của bạn của phối hợp không gian), bạn có thể làm điều này:

[self.navBar layoutIfNeeded]; 
CGRect titleViewFrameInTopLevelViewSpace = [self.navigationItem.titleView 
    convertRect:self.navigationItem.titleView.bounds 
    toView:self.view]; 

Bạn cần phải làm layoutIfNeeded nếu bạn vừa giao titleView, bởi vì theo mặc định, thanh điều hướng sẽ không bố trí các bản xem trước của nó cho đến lần truyền tiếp theo thông qua vòng lặp chạy.

Điều đó nói rằng, các titleView sẽ được căn giữa tự động, nếu nó phù hợp. Tôi nghĩ rằng bạn đang thiết lập khung (hoặc giới hạn) của chế độ xem tùy chỉnh của bạn quá lớn. Tôi đã thử nghiệm hai cách này:

  • Tôi thiết lập trực tiếp titleView trong XIB. Tôi chỉ cần kéo Chế độ xem từ thư viện Đối tượng vào giữa thanh điều hướng:
    XIB screen shot
    Chế độ xem có kích thước tự động đến 128x33. Các điều khiển thay đổi kích thước cho phép tôi điều chỉnh kích thước. Nó nằm ở giữa cho đến khi nó chồng lên nút Phân loại. Sau đó, nó chuyển sang trái.

  • tôi đặt titleView tài sản trong viewDidLoad:

    - (void)viewDidLoad 
    { 
        [super viewDidLoad]; 
        UIView *customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 50, 33)]; 
        customView.backgroundColor = [UIColor greenColor]; 
        self.navItem.titleView = customView; 
    } 
    

    Kết quả trông như thế này:
    Simulator screen shot

+0

Cảm ơn Rob. Đây là những gì khiến cho chế độ xem không được căn giữa. – ChrisP

2

Bạn có thể nhận được chiều rộng của leftBarButtonItemrightBarButtonItem sau khi bạn đã đặt chúng và sau đó sử dụng để xác định cách căn giữa trong chế độ xem bạn cung cấp cho titleView. Điều đó có thể làm những gì bạn muốn?

Các vấn đề liên quan