如何在 Swift 的导航栏顶部显示自定义视图?
Posted
技术标签:
【中文标题】如何在 Swift 的导航栏顶部显示自定义视图?【英文标题】:How to show a custom view on top of navigation bar in Swift? 【发布时间】:2018-11-06 02:34:40 【问题描述】:所以我理解导航栏(导航项)的方式是它有三个可以修改的位置,分别是左侧(leftBarButtomItem
)、中间(titleView
)和右侧(rightBarButtonItem
)。
现在我要实现的是,我只想在导航栏的最底部添加一个简单的进度条线,但仍在导航栏内。我想让它成为导航栏的扩展,我可以在其他屏幕上重复使用。但我希望左、中和右“视图”仍然像往常一样工作。例如我不希望如果我在其他视图控制器中手动更改标题视图内容,那么该行将消失/停止为该其他视图控制器工作。所以这感觉就像是在导航栏顶部添加了一个独立的叠加层作为子视图,与leftBarButtonItem
、titleView
和rightBarButtonView
分开,可以说。
是否可以在导航项中做到这一点?
【问题讨论】:
您可以使用导航栏 addSubview(:_) 直接添加您喜欢的任何视图。 @E.Coms oo 我什至没有检查导航项是否有 addSubView。我太执着于栏按钮和titleView。我多么业余。谢谢! 不是navigationItem,而是navigationBar。他们是不同的 哦,好吧,那么它在导航控制器上。谢谢! 【参考方案1】:这是一个如何添加图像而不是标题字符串的示例
fileprivate func setupTitle()
let logo = UIImage(named: "my_incredible_logo")
let imageView = UIImageView(image:logo)
imageView.contentMode = .scaleAspectFit
self.navigationItem.titleView = imageView
self.navigationController?.navigationBar.prefersLargeTitles = false
【讨论】:
是的,我明白这一点。但问题是这会阻止 titleView 正常工作(例如,让使用它的其他视图控制器设置自己的 titleView,因为这将覆盖incredible_logo 图像)。我需要一个浮动在导航栏顶部的覆盖视图解决方案,并且根本没有更改 titleView(可以单独管理)。有些人已经在评论中提出了一个解决方案,我可以直接将子视图添加到导航栏,而不是使用导航项。 @ChenLiYong 在主的葡萄园一切皆有可能以上是关于如何在 Swift 的导航栏顶部显示自定义视图?的主要内容,如果未能解决你的问题,请参考以下文章