首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Xcode的导航栏控制器中的标题下添加副标题

在Xcode的导航栏控制器中的标题下添加副标题
EN

Stack Overflow用户
提问于 2016-07-28 10:07:33
回答 8查看 31.1K关注 0票数 49

所以我想在导航控制器的导航栏的标题下添加一个“副标题”。

到目前为止,我查找的大多数内容都希望我使用CGRect。我不知道这是什么,听起来它想让我创建一个全新的视图,而这并不是我想要做的。

我的问题是,有没有一个点方法可以轻松地添加字幕视图?

我找到的最接近的东西是发布在stack overflow上的,这里是链接:

Create a subtitle in navigationbar

很明显,去年这是有效的,但现在我得到了错误,它在我的viewDidLoad中…

我试过这个:

self.navigationController?.navigationItem.prompt =“此处的副标题”

这是唯一不会显示任何错误但仍然不能工作的东西。从字面上看,它什么也不做。至少在运行时看不到任何东西。

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-07-28 13:54:24

虽然有一个解决方案,但它有一些已知的问题

解决方案是编写如下所示的函数

代码语言:javascript
复制
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中的自定义导航标题视图

代码语言:javascript
复制
self.navigationItem.titleView = setTitle("Title", subtitle: "SubTitle")

唯一已知的问题是,如果字幕变得非常大,就会出现错位。

最终结果

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

票数 60
EN

Stack Overflow用户

发布于 2017-02-23 03:32:23

这是我在扩展上使用堆栈视图的版本。

代码语言:javascript
复制
extension UINavigationItem {
    func setTitle(title:String, subtitle:String) {
        
        let one = UILabel()
        one.text = title
        one.font = UIFont.systemFont(ofSize: 17)
        one.sizeToFit()
        
        let two = UILabel()
        two.text = subtitle
        two.font = UIFont.systemFont(ofSize: 12)
        two.textAlignment = .center
        two.sizeToFit()
        
        let stackView = UIStackView(arrangedSubviews: [one, two])
        stackView.distribution = .equalCentering
        stackView.axis = .vertical
        stackView.alignment = .center
        
        let width = max(one.frame.size.width, two.frame.size.width)
        stackView.frame = CGRect(x: 0, y: 0, width: width, height: 35)
        
        one.sizeToFit()
        two.sizeToFit()
        
        self.titleView = stackView
    }
}
票数 76
EN

Stack Overflow用户

发布于 2018-10-14 19:59:57

@iosjillian的Swift 4扩展效果很好,添加了更多的扩展来尊重工具栏的外观和用户字体首选项:

代码语言:javascript
复制
import UIKit

extension UINavigationItem {

  func setTitle(_ title: String, subtitle: String) {
    let appearance = UINavigationBar.appearance()
    let textColor = appearance.titleTextAttributes?[NSAttributedString.Key.foregroundColor] as? UIColor ?? .black

    let titleLabel = UILabel()
    titleLabel.text = title
    titleLabel.font = .preferredFont(forTextStyle: UIFont.TextStyle.headline)
    titleLabel.textColor = textColor

    let subtitleLabel = UILabel()
    subtitleLabel.text = subtitle
    subtitleLabel.font = .preferredFont(forTextStyle: UIFont.TextStyle.subheadline)
    subtitleLabel.textColor = textColor.withAlphaComponent(0.75)

    let stackView = UIStackView(arrangedSubviews: [titleLabel, subtitleLabel])
    stackView.distribution = .equalCentering
    stackView.alignment = .center
    stackView.axis = .vertical

    self.titleView = stackView
  }
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38626004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档