iOS导航栏底部线条丢失

6
我通过在viewWillAppear中添加以下代码使导航栏完全透明:
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.translucent = true
self.navigationController?.navigationBar.barStyle = UIBarStyle.Black

在当前视图消失之前,在viewDidDisappear方法中进行以下操作来重置导航栏:
self.navigationController?.navigationBar.setBackgroundImage(nil, forBarMetrics: UIBarMetrics.Default)
self.navigationController?.navigationBar.shadowImage = nil

但是事实证明,导航栏的底部线条丢失了。这里有一张显示正常导航栏的图片:

enter image description here

但是现在变成了这样:

enter image description here

是否有任何关于发生了什么的想法?还有解决方案吗? 谢谢

2个回答

3
因为您将阴影图像设置为nil,所以它丢失了。要修复此问题,请删除下面这行代码:
```swift shadowImage = nil ```
self.navigationController?.navigationBar.shadowImage = nil

邦德,这解决了你的问题吗? - mgyky
不,它没有。导航栏的小线仍然没有显示出来。 - Junbang Huang
邦德,你能解释一下你的应用程序的故事板是什么,它是如何发生的吗?此外,我想了解为什么你正在使用viewWillAppear/viewDidDisappear方法。通常,我们使用appDelegate...didFinish...方法来自定义所有控件的外观(如导航栏)。之后,当我们需要自定义特定的视图控制器时,我们使用viewDidLoad。也就是说,假设你在主(根)视图控制器中并推送另一个控制器,但这个控制器将是透明的。为此,您需要为两个视图控制器都使用viewDidLoad。并根据您的需求重置一切。请尝试一下。 - mgyky
谢谢您的建议,我会尝试一下。事实上,我对iOS编程还比较新,这是我的第二个项目。但我仍然非常感激。为什么我的情况会发生可能与我做storyboard的方式有关。我选择了一个导航控制器应用程序,这样两个视图已经为我设置好了,一个是表视图。但我不想让表视图控制器成为导航控制器的根控制器,所以我将其删除,并将一个普通的UIView拖到storyboard上,并将我的自定义控制器设置为导航控制器的根控制器。 - Junbang Huang
删除上面的代码是错误的答案。实际上,上面的代码用于使底部线条可见。 - Tibin Thomas
亲爱的@Tibin Thomas,我在2015年回答了问题,但只回答了Junbang的问题,而不是所有相关的问题。这解决了Junbang的问题。如果您有更好的答案,请随时与我们分享。最好的祝愿。 - mgyky

1

只有当内容滚动视图垂直滚动一定距离时,导航栏阴影才可见。

“内容滚动视图”是关键——它是控制器的view中的第一个子视图。从iOS 15开始您可以设置它,否则,它基于子视图的顺序。

这也是导航栏确定是否在启用大标题时在导航栏下方显示大标题的方式。

令人沮丧的是,这个概念不仅没有被苹果公司记录在案,即使他们今年新增的方法也没有提供任何描述或文本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接