2

当我更新应用程序以使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属性并设置/取消设置shadowImageand backgroundImage。这在不使用大标题的情况下工作得很好,我附上了设置透明外观的图像:

UINavigationBar 没有背景图片和阴影,但显示 UIBarButtonItems 和 backButton

对于大标题,这仍然可以正常工作;将外观类型设置回“实心”后出现问题。我再附上两张显示问题的图片:

UINavigationBar 仍然没有背景

向上滚动一点以折叠大标题后,出现背景颜色

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

4

1 回答 1

0

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

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

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

于 2019-09-06T09:46:05.493 回答