UINavigationBar
không hiển thị phân cấp chế độ xem nội bộ của nó. Không có cách nào được hỗ trợ để tham chiếu đến UILabel
hiển thị tiêu đề.
Bạn có thể root trong phân cấp chế độ xem “thủ công” (bằng cách tìm kiếm thông qua subviews
), nhưng điều đó có thể ngừng hoạt động trong bản phát hành iOS trong tương lai do phân cấp khung là riêng tư.
Một giải pháp khác là tạo UILabel
và đặt làm bộ điều khiển chế độ xem navigationItem.titleView
. Tùy thuộc vào bạn để phù hợp với phong cách của nhãn mặc định, có thể thay đổi trong các phiên bản iOS khác nhau.
Điều đó nói rằng, nó khá dễ dàng để thiết lập:
override func didMove(toParentViewController parent: UIViewController?) {
super.didMove(toParentViewController: parent)
if parent != nil && self.navigationItem.titleView == nil {
initNavigationItemTitleView()
}
}
private func initNavigationItemTitleView() {
let titleView = UILabel()
titleView.text = "Hello World"
titleView.font = UIFont(name: "HelveticaNeue-Medium", size: 17)
let width = titleView.sizeThatFits(CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)).width
titleView.frame = CGRect(origin:CGPoint.zero, size:CGSize(width: width, height: 500))
self.navigationItem.titleView = titleView
let recognizer = UITapGestureRecognizer(target: self, action: #selector(YourViewController.titleWasTapped))
titleView.userInteractionEnabled = true
titleView.addGestureRecognizer(recognizer)
}
@objc private func titleWasTapped() {
NSLog("Hello, titleWasTapped!")
}
Tôi đang thiết lập kích thước của nhãn chiều rộng tự nhiên của nó (sử dụng sizeThatFits:
), nhưng tôi đang thiết lập chiều cao của nó đến 500. Các thanh điều hướng sẽ giữ chiều rộng nhưng thu nhỏ chiều cao theo chiều cao của thanh. Điều này tối đa hóa khu vực có sẵn để khai thác (vì chiều cao tự nhiên của nhãn có thể chỉ ~ 22 điểm nhưng thanh cao 44 điểm).
Nguồn
2014-10-09 22:10:24
Giải pháp hoàn hảo. Tôi hoàn toàn đồng ý không tìm kiếm thông qua phân cấp chế độ xem, như các ví dụ khác mà tôi đã tìm thấy, có thể không hoạt động trong tương lai. Cảm ơn bạn rất nhiều. – Richard
Tôi đã gần như có một mình, nhưng không nghi ngờ 'userInteractionEnabled'. +1. –
Tôi gặp vấn đề với giải pháp này. Trên các bản cập nhật sau của văn bản trong nhãn, nhãn chính nó nhảy tới x 0 (bên trái màn hình) vì một lý do nào đó. Có vẻ như một lỗi trong UIKit. Dù sao thì sao? (iOS 10.1.1) – Jonny