一尘不染

在Xcode的导航栏控制器中的标题下添加字幕

swift

因此,我想在导航控制器的导航栏中的标题下方添加一个“字幕”。

到目前为止,我查找的大部分内容都希望我使用CGRect。我不太清楚这是什么,这听起来像是要我创建一个全新的视图,而这并不是我想要的。

我的问题是,是否可以使用点方法轻松添加字幕视图?

显然去年这可行,但是现在我遇到了错误,它在我的viewDidLoad中…

我尝试了这个:

self.navigationController?.navigationItem.prompt =“这里有字幕”

这是唯一不会显示任何错误但仍然无法正常工作的东西。它实际上什么也没做。在运行时至少看不到任何东西。

顺便说一句,迅速是首选。谢谢!


阅读 186

收藏
2020-07-07

共1个答案

一尘不染

虽然有解决方案,但存在一些已知问题

解决方案是编写这样的函数

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

self.navigationItem.titleView = setTitle("Title", subtitle: "SubTitle")

唯一已知的问题是,如果字幕变得很大而不是放错位置,就会发生字幕。

最终结果
在此处输入图片说明

资料来源:https :
//gist.github.com/nazywamsiepawel/0166e8a71d74e96c7898

2020-07-07