带有大标题的UINavigationBar没有背景图片

时间:2018-07-03 14:40:05

标签: ios xcode uinavigationbar large-title

更新应用程序时,我遇到了一个问题,使得UINavigationBar实例显示大标题。问题是,在我的应用的某些屏幕上,我不希望UINavigationBar拥有shadowbackgroundColor,因此我有一种方法可以将其外观从“实体”状态改为“透明”,然后倒退。这是代码:

public static func setNavAppearance(type: AppearanceType, navigationBar: UINavigationBar?) {

    if (type == .transparent) {
        navigationBar?.setBackgroundImage(UIImage.init(), for: .default)
        navigationBar?.shadowImage = UIImage.init()
        navigationBar?.isTranslucent = true
    }
    else {
        navigationBar?.shadowImage = nil
        navigationBar?.setBackgroundImage(nil, for: UIBarMetrics.default)
        navigationBar?.isTranslucent = false
    }
}

如您所见,此方法所做的只是更改translucent属性并设置/取消设置shadowImagebackgroundImage。在不使用大标题的情况下,这种方法效果很好,我在其中附加了设置透明外观的图像和图像:

UINavigationBar without background image and shadow, but showing UIBarButtonItems and backButton

标题较大时,仍然可以正常工作;在将外观类型重新设置为“ solid”后出现问题。我还附加了两个显示问题的图像:

UINavigationBar still doesn't have background

After scrolling up a bit so that large title is collapsed, background color appears

问题是,navigationBar仅在不显示大标题时显示背景。我不知道是否必须更改其他属性,否则不适用于大标题。在此先感谢您的任何帮助。

1 个答案:

答案 0 :(得分:0)

我也遇到了这个问题。我的解决方法是将UINavigationController的UIView的背景色设置为UINavigationBar应该具有的背景色。

然后将UINavigationBar的颜色设置为UIClear和半透明,并确保具有大标题的UIViewController不应将其边缘延伸到顶部栏的下方。

基本上是将导航控制器的背景设置为导航栏的背景,并将顶部的所有背景设置为半透明。