一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Swift之导航栏标题文字太长,导致返回按钮文字消失问题解决

时间:2016-03-14 编辑:简简单单 来源:一聚教程网

项目中常常会使用 UINavigationController 对各个页面进行导航,导航栏左侧的返回按钮默认标题文字是上级页面的 title。

原文:Swift - 导航栏标题文字太长,导致返回按钮文字消失问题解决

但如果子页面的标题(title)文字过长,那么返回按钮的文字就会消失:
原文:Swift - 导航栏标题文字太长,导致返回按钮文字消失问题解决
同样地,即使在父页面中将 navigationItem.backBarButtonItem 设为自定义的 UIBarButtonItem,修改返回按钮的文字:
原文:Swift - 导航栏标题文字太长,导致返回按钮文字消失问题解决

如果子页面的标题文字过长,返回按钮的文字也是就会消失:

原文:Swift - 导航栏标题文字太长,导致返回按钮文字消失问题解决

解决办法:将导航栏标题视图替换成自定义label,并限制长度尺寸

通过 navigationItem.titleView 属性可以很方便的将其替换成自定义的 UIView 视图,这里我们使用固定尺寸的 UILabel,效果图如下:

原文:Swift - 导航栏标题文字太长,导致返回按钮文字消失问题解决

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 属性让文本标签自动缩放文字尺寸以适应标签大小。效果图如下:

原文:Swift - 导航栏标题文字太长,导致返回按钮文字消失问题解决

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()
    }
}

热门栏目