手动设置导航Item的titleView不垂直对齐

Posted

技术标签:

【中文标题】手动设置导航Item的titleView不垂直对齐【英文标题】:manually setting titleView of navigationItem is not alligned vertically 【发布时间】:2017-08-28 10:22:52 【问题描述】:

我在 UIViewController 扩展中使用这个函数来添加一个调整字体以适应宽度的标题。

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 question 中获取了这个解决方案,并对其进行了一些修改: How to resize Title in a navigation bar dynamically

现在我遇到的问题是标题的文本没有垂直对齐到其他导航栏项目,正如您在图像中看到的那样,我展示了一个我只是设置标题而不使用上述方法的地方,并且那里的文字不适合但对齐正确,另一张图片使用上面的方法,文字适合但未对齐。

【问题讨论】:

【参考方案1】:

试试这个:-

   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 的浮动值来设置垂直对齐方式。

【讨论】:

以上是关于手动设置导航Item的titleView不垂直对齐的主要内容,如果未能解决你的问题,请参考以下文章

IOS item属性总结

使用大型标题时如何对齐左侧的导航标题?

iOS系统导航栏自定义标题动画跳变解析

iOS系统导航栏自定义标题动画跳变解析

Bootstrap 3 - 导航栏内容的垂直对齐

导航栏菜单在小屏幕上不垂直对齐和汉堡菜单的位置