項目中常常會使用 UINavigationController 對各個頁面進行導航,導航欄左側的返回按鈕默認標題文字是上級頁面的 title。
如果子頁面的標題文字過長,返回按鈕的文字也是就會消失:
解決辦法:將導航欄標題視圖替換成自定義label,並限制長度尺寸通過 navigationItem.titleView 屬性可以很方便的將其替換成自定義的 UIView 視圖,這裡我們使用固定尺寸的 UILabel,效果圖如下:
import UIKit
class DetailViewController: UIViewController {
override func viewDidLoad() {
let titleView = UIView(frame: CGRectMake(0, 0, 200, 40))
let labelForTitle = UILabel(frame: CGRectMake(0, 0, 200, 30))
labelForTitle.font = UIFont.systemFontOfSize(17.0, weight: UIFontWeightMedium)
labelForTitle.center = titleView.center
labelForTitle.text = "文章列表(歡迎訪問hangge.com)"
titleView.addSubview(labelForTitle)
self.navigationItem.titleView = titleView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
功能改進:如果文字過長,label自動縮小文字大小
上面的方法會把多余的文字截斷並在後面添加...。如果想讓標題文字能完全顯示,可以通過 adjustsFontSizeToFitWidth 屬性讓文本標簽自動縮放文字尺寸以適應標簽大小。效果圖如下:
import UIKit
class DetailViewController: UIViewController {
override func viewDidLoad() {
let titleView = UIView(frame: CGRectMake(0, 0, 200, 40))
let labelForTitle = UILabel(frame: CGRectMake(0, 0, 200, 30))
labelForTitle.font = UIFont.systemFontOfSize(17.0, weight: UIFontWeightMedium)
labelForTitle.center = titleView.center
labelForTitle.adjustsFontSizeToFitWidth = true
labelForTitle.text = "文章列表(歡迎訪問hangge.com)"
titleView.addSubview(labelForTitle)
self.navigationItem.titleView = titleView
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}