手动设置导航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不垂直对齐的主要内容,如果未能解决你的问题,请参考以下文章