关于导航栏重叠的一点记录
最近应用中出现导航栏重叠的问题,经过仔细试验,发现出现的场景是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,虽然问题解决了,但是没有找到根本原因,头疼。
关于导航栏重叠的一点记录相关推荐
- html导航栏重叠怎么办,请问前端大神,html如何引入另一个html,写了一个导航栏想在多个页面中如何重复使用?...
写了一个头部导航栏的html 想在多个html页面中引用,请问怎么操作? 网上找了用标签 实际效果并不好 , 导航栏中按钮下拉菜单无法完全显示 请问大牛们平时开发中怎么处理这个的 如图 : 可以使用 ...
- 状态栏和导航栏重叠,解决办法
最近使用网页加载一个视频,工程中设置为竖屏方式. 全屏播放后,旋转手机,会横屏全屏播放视频.播放完成,点击done按钮,会自动返回横屏,此时导航栏上移了. 状态栏挡住了返回按钮... 1.正常情况下 ...
- iOS设置导航栏和状态栏
文章目录 iOS 15 之后导航栏背景色的设置 1.状态栏设置 1.1.没有导航栏 1.2.有导航栏 2.导航栏背景和字体颜色 2.1.十六进制颜色转RGB 2.2.生成纯色图片 3.导航栏的另外一种 ...
- uniapp自定义导航栏与手机状态栏重叠问题
HBuildX 创建的应用默认是沉浸式样式,去除自带的导航栏后,页面直通手机顶部状态栏,即页面与手机状态栏重叠问题 处理:配置mainfest.json来关闭沉浸式,打开应用的manifest.jso ...
- 利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录)
利用JQ实现的,高仿 彩虹岛官网导航栏(学习HTML过程中的小记录) 作者:王可利(Star·星星) 总结: 今天学习的jQ类库的使用,代码重复的比较多需要完善.严格区分大小写,在 $(" ...
- 前端学习记录13-CSS-(滑动门技术,微信导航栏实现,淘宝轮播图实现,图标字体实现,过渡效果,获得焦点元素)
前端学习记录13-CSS-滑动门技术,微信导航栏实现,淘宝轮播图实现,图标字体实现,过渡效果,获得焦点元素 滑动门技术 微信导航栏实现 静态轮播图实现 网上引用的图标字体设置 过渡效果(transit ...
- 2022-06-20 工作记录--CSS-sticky实现导航栏、侧边栏固定,右侧展示内容顺畅滑动效果
CSS-sticky实现导航栏.侧边栏固定,右侧内容顺畅滑动效果 不积跬步无以至千里~ 细节决定成败,加油
- 简单记录—vue 用js方法实现侧边导航栏联动选择
侧边导航栏有两个功能要实现: 1.选择任意一条页面滚动到指定目录位置 2.页面内容滚动侧边栏跟随一起滚动 页面结构部分,根据数据循环写一个ul > li,生成侧边目录 <ul>< ...
- 分别用ToolBar和自定义导航栏实现沉浸式状态栏
一.ToolBar 1.在build.gradle中添加依赖,例如: compile 'com.android.support:appcompat-v7:23.4.0' 2.去掉应用的ActionBa ...
最新文章
- QIIME 2教程. 12数据筛选Filtering data(2021.2)
- signal.h 中的宏定义 SIG_DFL 及 SIG_IGN
- 集训队脱单大法:这是一道只能由学姐我自己出数据的水题
- 有生之年必看!千古第一奇书《山海经》到底是怎样的一本书?
- webapi随机调用_BeetleX之webapi验证插件JWT集成
- [7] ADB 模拟按键/输入
- 使用lkjson处理Json数据
- 2021年9月计算机二级Office电脑版刷题软件(真题题库)分享
- myeclipse 10破解
- NLP句子表征,NLP 的巨人肩膀(下):从 CoVe 到 BERT (转载)
- 全网最全python爬虫精进
- Linux之系统痕迹命令
- 纯C语言INI文件解析
- @Async 异步任务自定义线程池的配置方法和 @Scheduled 定时任务自定义线程池的配置方式
- Google搜索命令“site:”运算符高级使用技巧:
- HDU4080【Stammering Aliens】(字符串哈希、二分法)
- QCI1建立不及时导致未接通
- 程序设计思维 B - 猫猫向前冲(拓扑排序、Kahn算法)
- Phalcon 简介
- rxjava+retrofit鲁班压缩(图片)