手动设置navigationItem的titleView不是垂直排列的

时间:2017-08-28 10:22:52

标签: swift uinavigationcontroller uinavigationitem

我在UIViewController扩展程序中使用此func来添加一个标题,用于调整字体以适应宽度。

extesion UIViewController {
    func setTitleDifferentSizes(title: String){
        self.title = title
        guard let navigationBarHeight: CGFloat = 
self.navigationController?.navigationBar.frame.height else{
            return
        }

        let tlabel = UILabel(frame: CGRect(x: 0.0, y: 0.0, width: 
        200.0, height: navigationBarHeight))
        tlabel.text = self.title
        tlabel.textColor = UIColor.white
        tlabel.font = font24
        tlabel.backgroundColor = UIColor.clear
        tlabel.adjustsFontSizeToFitWidth = true
        self.navigationItem.titleView = tlabel
    }
}

我从这个SO问题中得到了这个解决方案并稍微改了一下: How to resize Title in a navigation bar dynamically

现在我遇到的问题是标题的文字没有与其他导航栏项目垂直对齐,正如你在图片中看到的那样,我在不使用上述方法的情况下显示我刚设置标题的地方,以及那里的文字不合适,但它是正确对齐的,另一张图片是使用上面的方法,文本适合但不对齐。

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:3)

试试这个: -

   func setTitleDifferentSizes(title: String){
    self.title = title
    guard let navigationBarHeight: CGFloat =
        self.navigationController?.navigationBar.frame.height else{
            return
    }
    let attributedString = NSMutableAttributedString(string: title)

     let myAttribute = [ NSForegroundColorAttributeName: UIColor.white ,NSFontAttributeName: font24]

    attributedString.addAttributes(myAttribute, range: NSRange(location: 0, length: attributedString.string.characters.count))

    attributedString.addAttributes([NSBaselineOffsetAttributeName:6.0], range:         NSRange(location: 0, length: title.characters.count)
    )

    let tlabel = UILabel(frame: CGRect(x: 0.0, y: 0.0, width:
        200.0, height: navigationBarHeight))
    tlabel.attributedText = attributedString
    tlabel.backgroundColor = UIColor.clear
    tlabel.adjustsFontSizeToFitWidth = true
    tlabel.minimumScaleFactor = 0.2
    tlabel.textAlignment = .center
    self.navigationItem.titleView = tlabel
}

如果要调整文本的位置,请更改NSBaselineOffsetAttributeName的浮点值以设置垂直对齐。