IOS自定义NavigationBar通顶的问题

IT教程 4年前 (2020) https://www.55wd.com

navigationbar

之前开发自定义ios NavigaitonBar的时候遇到过一些显示上的问题,即在非NavigationController里面使用NavigationBar的时候,会出现navigation bar 不能通顶的问题(即不能将背景显示在通知栏下方),具体图示如下:

IOS自定义NavigationBar通顶的问题

之前也大概的查了一下,网上给出的大部分方案(如添加在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的通顶了

效果图如下:

IOS自定义NavigationBar通顶的问题

现在来分析下为什么 说之前网上给出的方案会有问题, 我们先来分析下UINavigationController 中UINavigationBar 的View的结构:

IOS自定义NavigationBar通顶的问题

可以看到NavigationBar的Frame和背景的Frame是不同的。也就是说 系统的默认实现 并没有改变NavigationBar大小。只不过是在navigationBar的后方添加了一个layer。作为background layer 通过改变layer的颜色来实现通顶。

那么对比网上的两个方法。

1.在status部分添加一个view 同步改变view的颜色。

这个方法的问题在于代码内聚性过低。而且NavigationBar的背景层有blur效果。如果添加会导致,如果更改颜色需要同时更改两个地方,且statusbar下面的view还不能直接使用UIView,而是Visual effect view with blur。

2.直接改变navigationbar 的frame使其通顶。

这个方案更不推荐因为,这样会改变navigationbar 的坐标原点。 导致内部的navigationItem发生位移。

其他的小众方案就不细谈了。

其实苹果在delegate 中为我们留出了。NavigationBar通顶的方法,所以最好直接使用官方的api,这样以后的兼容性会更好。关于NavigationBar通顶的问题就说到这里。其实是个很小的问题。但是看到国内网站上的解决方案都有点蹩脚。所以专门写一篇文章来说明下这个官方api。

《天天连萌》ios脚本刷分技巧

内容摘要:天天连萌ios脚本刷分教程是今天小编为各位玩家准备的,很多天天连萌玩家不知道如何刷分。相信看完下面的天天连萌ios脚本刷

微信iOS 7.0.12版本上线 正式支持深色模式

昨日,微信发布了IOS最新的7.0. 12 版本,据更新内容显示,微信已正式支持深色模式。同时,微信还优化了语音消息发送,可将语音消息转化成

苹果再推多款iOS限免优惠游戏:包括《机械迷城》等经典

3月27日,苹果App Store应用商店再次推出了iOS限免和优惠游戏合集,这次限免的游戏数量有十多款,同时也有几款经典游戏加入优惠,比如《

手把手教你联想电脑怎么进入bios

联想电脑是中国驰名品牌,凭借着其稳定的性能、完善的品质和优异的服务深受大众喜爱。不过一些使用联想电脑的朋友不知道进入bios。

微信PC端开始公测小游戏,并提供自定义窗口等PC新功能

3月25日,微信团队发布公告表示,在微信PC新版本中,将支持打开聊天分享中的小游戏。并增加小程序面板,可查看使用过的小程序,欢迎下载微

文章回顾

大家看了本文IOS自定义NavigationBar通顶的问题的精彩教程资源内容,是不是对IOS自定义NavigationBar通顶的问题了解更多,真心希望IOS自定义NavigationBar通顶的问题能帮助到你, 小编会一直给你带来更多教程资源文章信息。

版权声明: 发表于 2020-07-06 17:48:29。

本文由第三方用户分享仅代表作者观点,不代表本网站立场,秉承互联网开放分享的精神,目的在于传递更多信息,加强各行业互通交流,但对内容不作任何保证或承诺,请读者自行参考斟酌。网站发布的信息(包含但不限于版式、图片、字体、文章等素材)由第三方用户分享,版权归原作者所有,本站不承担任何相关的版权纠纷等相关责任。如您认为本篇内容侵犯了您的权益,请与我们联系,我们会及时处理。

豌豆资源网专注分享全网综合资源网站大全,致力于超实用的内容资源搜索。

转载请注明:
本文标题:IOS自定义NavigationBar通顶的问题
本文地址:https://55wd.com/s99012/