更新应用程序时,我遇到了一个问题,使得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
仅在不显示大标题时显示背景。我不知道是否必须更改其他属性,否则不适用于大标题。在此先感谢您的任何帮助。
答案 0 :(得分:0)
我也遇到了这个问题。我的解决方法是将UINavigationController的UIView的背景色设置为UINavigationBar应该具有的背景色。
然后将UINavigationBar的颜色设置为UIClear和半透明,并确保具有大标题的UIViewController不应将其边缘延伸到顶部栏的下方。
基本上是将导航控制器的背景设置为导航栏的背景,并将顶部的所有背景设置为半透明。