iOS导航栏pop的时候出现短暂蓝色

来源:互联网 发布:迅捷数据恢复软件 编辑:程序博客网 时间:2024/05/22 05:28

起因

今天看老的项目,突然发现一个问题:

从页面①push到页面②,pop回页面①的时候,发现导航栏上面有那么一闪而逝的蓝色。

解决

然后我就开始考虑这个问题产生的原因:
1. 首先,我检查了页面①的导航栏设置。
我在该页面是把导航栏设置为透明的

- (void)viewWillAppear:(BOOL)animated {[super viewWillAppear:animated];[self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc] init] forBarMetrics:UIBarMetricsDefault];[self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];}- (void)viewWillDisappear:(BOOL)animated {[super viewWillDisappear:animated];[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"默认导航栏图片"] forBarMetrics:UIBarMetricsDefault];}

然后,我就想着,要不就在viewWillAppear中把导航栏隐藏下,等viewWillDisappear中再把导航栏显示出来。大不了就重新添加些label,button来模拟一个导航栏出来。
然后我就试了下,发现,并没有什么卵用!


  • 接着,我发现同一个属于页面①下面的子页面,进去再pop出来的时候,并没有那个蓝色。
    然后,我就到页面②中去寻找问题。
    经过对比,我发现,页面②跟同层级的别的Controller相比,少了些代码。
    原来,我在别的Controller的viewWillAppear中都手动设置了导航栏的!

引人深思:
这个项目是以前写的,当时没有设置基类,所以才导致有些页面忘记设置导航栏属性。
tip:

以后各位再构建新的工程的时候,多使用基类,方便省事!!!

原来问题在这里!接着我就在页面②的viewWillAppear中添加了相关代码。问题解决!


  • 发散思维(说白了就是好奇心)驱使下,
    我在页面②viewWillAppear中设置过后,重新在页面①中设置导航栏hidden
    发现,也是不行的

  • 我想到了我在网上查询的别人的问题以及解决方法解决 iOS View Controller Push/Pop 时的黑影

他的说法,如果这个 ViewController 是在 TabBarViewController 的 NavigationController 上 Push/Pop 的,那么只需要把 TabBarViewController 的 View 设置一下白色背景就可以了, 我找到TabbarController,设置背景色,没卵用!!!


  • 同样的,我也搜到了别的说是根windows没有设置背景色的,然后,仍然没用

  • 如果有大神能看到,请给我讲解下这个问题!谢谢!!

PS

说道上面的文章,他有说道一个问题,也是我遇到的

iOS 的 UITableViewCell 有一个很严重的问题,是 7.x 某个版本以后引起的,如果给 detailTextLabel.text 设置 nil 或者 "",再设置具体的 text 后有时会显示不出来,但 Tap 一下能出来。具体的解决办法是,不要设置 nil"",设置 " " (中间有空格)。真是让人吐血的 Workaround。

当时的设计是这样的:
这里写图片描述

然后设置头像那里,我想着偷下懒: 设置cell的detailTextLabel为@“”,再添加一个ImageView,然后添加约束,就可以了。

然后,在查看UI的时候,发现头像”飞了”,然后我各种调试,才发现是detailTextLabel不显示,因此,我也使用这种比较拙略的解决方法:

cell.detailTextLabel.text = @" ";[cell addSubview:self.userIconImgView];//这里是Masonry代码[self.userIconImgView mas_makeConstraints:^(MASConstraintMaker *make) {    make.centerY.equalTo(cell);    make.right.equalTo(cell.extraLabel.mas_right);    make.size.mas_equalTo(CGSizeMake(60, 60));}];
1 0
原创粉丝点击