起因
今天看老的項目,突然發現一個問題:
從頁面①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));
}];