跨越导航栏后面的 UIViewController 背景图像?

Posted

技术标签:

【中文标题】跨越导航栏后面的 UIViewController 背景图像?【英文标题】:UIViewController background image that spans up behind the navigation bar? 【发布时间】:2018-11-08 05:11:52 【问题描述】:

我有一个有趣的问题,我不确定是否可以通过标准方式解决:

我有一个 UIViewController,其 UIImageView 位于顶部,与容器的顶部空间齐平。标准的东西。

然而,我想做的是看看是否有办法让图像也出现在导航栏后面(因此导航栏覆盖在背景图像之上)。

我的想法是这是不可能的,因为图像不能跨越两个视图控制器。我当然可以将它放在一个视图控制器上,甚至让导航栏有一个背景图像,但我不能让它同时包含相同的图像,对吗?

我想实现这样的事情的唯一方法是隐藏我的导航栏,并制作我自己的“作弊”一个实际驻留在视图控制器中的“作弊”来模拟它。

任何想法或这是否打破了基本面。

编辑:在尝试了这两个建议之后,它最终会这样做(在这两种情况下): https://imgur.com/a/RwALHac

所以它几乎就像将顶部栏设置为一张图片,底部的表格视图设置为图片但缩小了

有什么想法吗?

【问题讨论】:

【参考方案1】:

使透明导航栏可见背景图像。将以下代码添加到您的导航栏扩展中。

func transparentNavigationBar() 
        self.navigationController!.navigationBar.setBackgroundImage(UIImage(),for: UIBarMetrics.default)
        self.navigationController?.navigationBar.shadowImage = UIImage()
        self.navigationController?.navigationBar.isTranslucent = true
        self.navigationController!.view.backgroundColor = UIColor.clear
        self.navigationController?.navigationBar.backgroundColor = UIColor.clear
    

【讨论】:

试过了,但现在结果是这样的,有什么想法吗? imgur.com/a/RwALHac 你是否设置了imageView的top constraints,等于superView的top constraints。 嘿,谢谢,是的。它说“超级视图的顶部空间:-100 常量”【参考方案2】:

其实这很简单。确保导航控制器的根视图控制器的边缘在顶栏下扩展(界面构建器中的简单复选框),然后使用以下代码使导航栏透明:

navigationBar.setBackgroundImage(UIImage(), for: .default)
navigationBar.shadowImage = UIImage()
.navigationBar.isTranslucent = true

这将使您的视图控制器(因此,它是背景图像)一直延伸到屏幕顶部,导航栏重叠。导航栏本身将不可见,但其内容将是(按钮、标题等)

【讨论】:

感谢您的宝贵时间,我最终做出了更改,但它看起来像这样:imgur.com/a/RwALHac 好像您添加了单独的图像作为导航栏的背景。你不应该这样做,除非我误解了你想要达到的目标。 看起来是这样,但实际上是同一张图片,只是放大了一张,另一张没有。想法? 您根本不应该添加图像。请注意示例代码中的 UIImage 初始化程序。只是UIImage(),没有参数。从您提供的屏幕截图中,我猜您添加了实际图像。一些代码将有助于查看确切的问题。

以上是关于跨越导航栏后面的 UIViewController 背景图像?的主要内容,如果未能解决你的问题,请参考以下文章

七UIViewController导航栏

UIViewController 呈现 UINavigationController - 没有导航栏?

标签栏 UIViewController 中导航栏中的按钮未显示

推送 UIViewController 的自定义导航栏

UIViewController 导航 - 在意外状态下完成导航转换。导航栏子视图树可能会损坏

如何在 uiviewcontroller 的导航栏中添加后退按钮?