因此,我想在导航控制器的导航栏中的标题下方添加一个“字幕”。
到目前为止,我查找的大部分内容都希望我使用CGRect。我不太清楚这是什么,这听起来像是要我创建一个全新的视图,而这并不是我想要的。
我的问题是,是否可以使用点方法轻松添加字幕视图?
显然去年这可行,但是现在我遇到了错误,它在我的viewDidLoad中…
我尝试了这个:
self.navigationController?.navigationItem.prompt =“这里有字幕”
这是唯一不会显示任何错误但仍然无法正常工作的东西。它实际上什么也没做。在运行时至少看不到任何东西。
顺便说一句,迅速是首选。谢谢!
虽然有解决方案,但存在一些已知问题
解决方案是编写这样的函数
func setTitle(title:String, subtitle:String) -> UIView { let titleLabel = UILabel(frame: CGRectMake(0, -2, 0, 0)) titleLabel.backgroundColor = UIColor.clearColor() titleLabel.textColor = UIColor.grayColor() titleLabel.font = UIFont.boldSystemFontOfSize(17) titleLabel.text = title titleLabel.sizeToFit() let subtitleLabel = UILabel(frame: CGRectMake(0, 18, 0, 0)) subtitleLabel.backgroundColor = UIColor.clearColor() subtitleLabel.textColor = UIColor.blackColor() subtitleLabel.font = UIFont.systemFontOfSize(12) subtitleLabel.text = subtitle subtitleLabel.sizeToFit() let titleView = UIView(frame: CGRectMake(0, 0, max(titleLabel.frame.size.width, subtitleLabel.frame.size.width), 30)) titleView.addSubview(titleLabel) titleView.addSubview(subtitleLabel) let widthDiff = subtitleLabel.frame.size.width - titleLabel.frame.size.width if widthDiff < 0 { let newX = widthDiff / 2 subtitleLabel.frame.origin.x = abs(newX) } else { let newX = widthDiff / 2 titleLabel.frame.origin.x = newX } return titleView }
使用此功能自定义导航标题视图 viewDidLoad
viewDidLoad
self.navigationItem.titleView = setTitle("Title", subtitle: "SubTitle")
唯一已知的问题是,如果字幕变得很大而不是放错位置,就会发生字幕。
最终结果
资料来源:https : //gist.github.com/nazywamsiepawel/0166e8a71d74e96c7898