当我更新一个应用程序以使UINavigationBar实例显示大标题时,我遇到了一个问题。问题是,在我的应用程序的一些屏幕中,我不希望UINavigationBar有shadow或backgroundColor,所以我有一个方法可以将它的外观从“固态”更改为“透明”状态,然后再向后更改。代码如下:
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属性以及设置/取消设置shadowImage和backgroundImage。这在没有使用大标题的情况下工作得很好,在那里我附加了设置透明外观所做的图像:
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不显示大标题时,它才会显示背景。我不知道我是否必须更改另一个属性,或者这对大标题不起作用。任何帮助都将不胜感激,提前谢谢。
发布于 2019-09-06 17:46:05
我也提到了这个问题。我的解决方法是将UINavigationController的UIView的背景色设置为UINavigationBar应该具有的背景色。
然后将UINavigationBar颜色设置为UIClear和半透明,并确保带有大标题的UIViewController不应将其边缘延伸到顶部栏下。
它基本上是将导航控制器的背景设置为导航栏的背景,并将顶部的所有背景设置为半透明。
https://stackoverflow.com/questions/51157306
复制相似问题