最近应用中出现导航栏重叠的问题,经过仔细试验,发现出现的场景是UIWebView中加入interactivePopGestureRecognizer右滑手势,在右滑UIWebViewController到一半的时候停住,这时候 WebView还在加载,直到其加载完毕再松开手,就会出现重叠的导航栏。
原因分析:排查代码,发现在viewDidLoad的时候设置了一遍self.title=xxx_name;

- (void)viewDidLoad {[super viewDidLoad];self.title = xxx_name;}

在webViewDidFinishLoad中,也就是WebView加载完毕又设置了一遍self.title=xxx_name。

- (void)webViewDidFinishLoad:(UIWebView *)webView
{[super webViewDidFinishLoad:webView];NSString xxx_name = [self.webView stringByEvaluatingJavaScriptFromString:@"getTitleName()"];self.title = xxx_name;
}

目的是进入页面的时候有xxx_name的话就直接设置标题,如果没有xxx_name就需要通过js取到我们所需的标题然后在页面加载完设置。
显然设置两遍title理论上是不会出问题的,事实上正常情况下设置再多遍也没什么问题。关键是第二次设置title的时机,是在右滑倒一半停住的时候,界面上一半是上层viewcontroller,一半是当前viewcontroller,这个时候WebView经历了”加载->加载完毕->设置标题”的过程,猜测是不是这个时候设置的标题不在当前WebView导航栏上?
我好奇点进去self.title看看,发现setTitle:(NSString *)title方法在基类中被修改过:

- (void)setTitle:(NSString *)title
{[super setTitle:title];UILabel *_titleView = [[UILabel alloc] init];_titleView.textColor = [UIColor whiteColor];_titleView.backgroundColor = [UIColor clearColor];_titleView.font = [UIFont boldCustomFontOfSize:18.0f];_titleView.textAlignment = NSTextAlignmentCenter;CGRect frame = _titleView.frame;_titleView.frame = CGRectMake(frame.origin.x, 5, frame.size.width, 34);self.navigationItem.titleView = _titleView;_titleView.text = title;}

这里的titleView是临时变量的写法,但是如果是设置同一个viewcontroller的话,每次调用self.navigationItem.titleView = _titleView;也不会有影响啊,那是不是停在一半的时候设置的self.navigationItem.titleView中这个self不是当前的?我先试着试着把setTitle:(NSString *)title方法修改一下:

- (void)setTitle:(NSString *)title
{[super setTitle:title];CGRect frame = self.titleViewLabel.frame;_titleViewLabel.frame = CGRectMake(frame.origin.x, 5, frame.size.width, 34);self.navigationItem.titleView = _titleViewLabel;_titleViewLabel.text = title;
}- (UILabel *)titleViewLabel
{if (!_titleViewLabel) {_titleViewLabel = [[UILabel alloc] init];_titleViewLabel.textColor = [UIColor whiteColor];_titleViewLabel.backgroundColor = [UIColor clearColor];_titleViewLabel.font = [UIFont boldSystemFontOfSize:18.0f];_titleViewLabel.textAlignment = NSTextAlignmentCenter;}return _titleViewLabel;
}

将titleView这种临时变量写法换成了整个viewcontroller生命周期都存在的对象titleViewLabel,然后再试验了一下,发现问题居然解决了!也没有再复现导航栏标题重叠的问题!这样就可以排除“self.navigationItem.titleView中这个self不是当前的?”这个无厘头的猜想,因为设置标题的代码是在当前这个viewcontroller中的,也没理由是另一个的,其实通过打断点在控制台输出self也可以发现两次self都是当前的webviewcontroller。那么问题就变成了同一个viewcontroller设置两遍navigationItem.titleView出现了 两个titleView,虽然问题解决了,但是没有找到根本原因,头疼。

关于导航栏重叠的一点记录相关推荐

  1. html导航栏重叠怎么办,请问前端大神,html如何引入另一个html,写了一个导航栏想在多个页面中如何重复使用?...

    写了一个头部导航栏的html 想在多个html页面中引用,请问怎么操作? 网上找了用标签 实际效果并不好 , 导航栏中按钮下拉菜单无法完全显示 请问大牛们平时开发中怎么处理这个的 如图 : 可以使用 ...

  2. 状态栏和导航栏重叠,解决办法

    最近使用网页加载一个视频,工程中设置为竖屏方式. 全屏播放后,旋转手机,会横屏全屏播放视频.播放完成,点击done按钮,会自动返回横屏,此时导航栏上移了. 状态栏挡住了返回按钮... 1.正常情况下 ...

  3. iOS设置导航栏和状态栏

    文章目录 iOS 15 之后导航栏背景色的设置 1.状态栏设置 1.1.没有导航栏 1.2.有导航栏 2.导航栏背景和字体颜色 2.1.十六进制颜色转RGB 2.2.生成纯色图片 3.导航栏的另外一种 ...

  4. uniapp自定义导航栏与手机状态栏重叠问题

    HBuildX 创建的应用默认是沉浸式样式,去除自带的导航栏后,页面直通手机顶部状态栏,即页面与手机状态栏重叠问题 处理:配置mainfest.json来关闭沉浸式,打开应用的manifest.jso ...

  5. 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)

    利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)   作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...

  6. 前端学习记录13-CSS-(滑动门技术,微信导航栏实现,淘宝轮播图实现,图标字体实现,过渡效果,获得焦点元素)

    前端学习记录13-CSS-滑动门技术,微信导航栏实现,淘宝轮播图实现,图标字体实现,过渡效果,获得焦点元素 滑动门技术 微信导航栏实现 静态轮播图实现 网上引用的图标字体设置 过渡效果(transit ...

  7. 2022-06-20 工作记录--CSS-sticky实现导航栏、侧边栏固定,右侧展示内容顺畅滑动效果

    CSS-sticky实现导航栏.侧边栏固定,右侧内容顺畅滑动效果 不积跬步无以至千里~ 细节决定成败,加油

  8. 简单记录—vue 用js方法实现侧边导航栏联动选择

    侧边导航栏有两个功能要实现: 1.选择任意一条页面滚动到指定目录位置 2.页面内容滚动侧边栏跟随一起滚动 页面结构部分,根据数据循环写一个ul > li,生成侧边目录 <ul>< ...

  9. 分别用ToolBar和自定义导航栏实现沉浸式状态栏

    一.ToolBar 1.在build.gradle中添加依赖,例如: compile 'com.android.support:appcompat-v7:23.4.0' 2.去掉应用的ActionBa ...

最新文章

  1. QIIME 2教程. 12数据筛选Filtering data(2021.2)
  2. signal.h 中的宏定义 SIG_DFL 及 SIG_IGN
  3. 集训队脱单大法:这是一道只能由学姐我自己出数据的水题
  4. 有生之年必看!千古第一奇书《山海经》到底是怎样的一本书?
  5. webapi随机调用_BeetleX之webapi验证插件JWT集成
  6. [7] ADB 模拟按键/输入
  7. 使用lkjson处理Json数据
  8. 2021年9月计算机二级Office电脑版刷题软件(真题题库)分享
  9. myeclipse 10破解
  10. NLP句子表征,NLP 的巨人肩膀(下):从 CoVe 到 BERT (转载)
  11. 全网最全python爬虫精进
  12. Linux之系统痕迹命令
  13. 纯C语言INI文件解析
  14. @Async 异步任务自定义线程池的配置方法和 @Scheduled 定时任务自定义线程池的配置方式
  15. Google搜索命令“site:”运算符高级使用技巧:
  16. HDU4080【Stammering Aliens】(字符串哈希、二分法)
  17. QCI1建立不及时导致未接通
  18. 程序设计思维 B - 猫猫向前冲(拓扑排序、Kahn算法)
  19. Phalcon 简介
  20. rxjava+retrofit鲁班压缩(图片)

热门文章

  1. RxSwift + Moya + HandyJSON + 各种插件搭建响应式网络架构
  2. 粗糙集基本理论知识——入门必看
  3. 【报告分享】大湾区房地产指南-仲量联行(附下载)
  4. 基于windows的身份验证
  5. SAP HCM:和出勤天数相关的工资核算?
  6. 网易游戏_互娱_游戏测试秋招提前批
  7. 【SpringBoot】整合Elasticsearch 操作索引及文档
  8. 在微信小程序开发软件中设置字体大小问题
  9. SQL server 数据库关系图无法打开 解决办法
  10. 自己动手写一个jQuery插件(第二篇)