2012-05-23 42 views
10

Tôi có một titleView tùy chỉnh mà tôi cần đặt độ rộng tối đa cho. Đó sẽ là chiều rộng màn hình - chiều rộng của mục bên trái (tựa đề, nút hoặc nil) - chiều rộng của mục bên phải (nút hoặc không). Làm thế nào tôi có thể xác định điều này?Nhận chiều rộng tối đa của uinavigationItem.titleView?

Cảm ơn.

Trả lời

4

Thanh điều hướng có đặt chiều rộng thành chiều rộng tối đa tự động không? Ý tôi là, tôi chắc chắn sizeThatFits: phương thức của tiêu đề tùy chỉnh của bạn được gọi. Có lẽ đây là một điểm khởi đầu tốt.

+0

Nó không tự động đặt chiều rộng. Tôi có thể gọi sizeToFit mà gọi sizeThatFits sau khi thiết lập nó, nhưng tôi không biết những gì để trở về từ sizeThatFits. Tôi lấy chiều rộng tối đa từ đâu? – Stephanie

+0

Tôi chưa thử nghiệm bản thân, nhưng vì lượt xem tiêu đề được thay đổi kích thước để vừa với vừa là giữa các mục điều hướng bên trái và bên phải, tôi mong rằng thông điệp sizeThatFits sẽ được gửi bởi thanh điều hướng đến titleView. Không phải vậy sao? –

+0

Tôi không nghĩ vậy, nhưng tôi không chắc chắn. Nhưng dù sao đi nữa, tôi phải trả lại gì từ sizeThatFits? – Stephanie

6
_segmentedControl.frame = CGRectMake(0, 0, CGFLOAT_MAX, _segmentedControl.frame.size.height); 

[self.navigationItem setTitleView:_segmentedControl]; 

Đặt CGFLOAT_MAX làm chiều rộng cho điều hướngChế độ xem tiêu đề sử dụng khoảng trống tối đa có sẵn giữa mục bên trái và mục bên phải.

+0

Điều này phải được đánh dấu là câu trả lời chính xác. – Peymankh

+0

Tính năng này hoạt động trên iOS <11 (chế độ xem được tự động kích thước cho tôi trong iOS 11) –

0

Đặt chiều rộng tiêu đềView thành chiều rộng lớn hơn mức cần thiết cho chiều rộng màn hình tối đa và thanh điều hướng đổi kích thước chiều rộng cho vừa với màn hình. Nếu có UIBarButtonItem trái hoặc phải, thì titleView sẽ thay đổi kích thước tương ứng với chúng. Hãy thử xoay màn hình và xem cho chính mình.

func setTitleView(){ 
    guard let navFrame = navigationController?.navigationBar.frame else{ 
     return 
    } 
    let myView = UIView(frame: CGRect(x: 0, y: 0, width: navFrame.width*3, height: navFrame.height)) 
    myView.backgroundColor = UIColor.orange 
    self.navigationItem.titleView = myView 
} 
Các vấn đề liên quan