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:

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:

Nguồn
2011-11-27 21:05:00
Cảm ơn Rob. Đây là những gì khiến cho chế độ xem không được căn giữa. – ChrisP