之前开发自定义ios NavigaitonBar的时候遇到过一些显示上的问题,即在非NavigationController里面使用NavigationBar的时候,会出现navigation bar 不能通顶的问题(即不能将背景显示在通知栏下方),具体图示如下:
之前也大概的查了一下,网上给出的大部分方案(如添加在status bar 下面添加一个view,或直接改变UInavigationBar的frame等等),我认为并不能很好的解决这个问题。
进过查阅苹果的api后,发现一个delegate:UIBarPositioningDelegate,这个类是UINavigationBarDelegate的基类。先将问题的解决方案抛出,再解释下为什么网上给出的方案本人并不认同。
方案(swift):
首先设置自定义的NavigaitonBar的delegate,即:
navigationBar.delegate = self
(其中self实现UINavigationBarDelegate)
再实现下面的代理方法:
func position(for bar: UIBarPositioning) -> UIBarPosition {
return .topAttached
}
就可以很简单的实现UINavigationBar的通顶了
<