项目中常常会使用 UINavigationController 对各个页面进行导航,导航栏左侧的返回按钮默认标题文字是上级页面的 title。
但如果子页面的标题(title)文字过长,那么返回按钮的文字就会消失:
同样地,即使在父页面中将 navigationItem.backBarButtonItem 设为自定义的 UIBarButtonItem,修改返回按钮的文字:
如果子页面的标题文字过长,返回按钮的文字也是就会消失:
解决办法:将导航栏标题视图替换成自定义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()
}
}