Здається, це трапляється з будь-якою напівпрозорою панеллю (TabBar або ToolBar).
Тож один із способів виправити це - встановити _tabBar.translucent = NO;
(у моєму випадку). Це запобігає виникненню небажаної тіні під верхньою панеллю навігації, залишаючи панель навігації напівпрозорою. На жаль, нижня панель вже не напівпрозора.
Його можна повернути до напівпрозорого, але все це має відбутися після закінчення всієї анімації штовхання, тому перемикання цієї властивості добре помітно.
У випадку, однак, нижня панель також повинна бути напівпрозорою, і я не хочу, щоб користувач бачив зміни, я вирішив це наступним чином:
/* create a simple quick animation of the bottom bar
just before pushing the new controller */
[UIView animateWithDuration:0.1
animations:^{
_tabBar.barTintColor = [UIColor colorWithWhite:0.97254901960784 alpha:1.0]; // this is the closest color for my case
_tabBar.translucent = NO;
} completion:^(BOOL finished) {
/* now when the animation that makes the bar not translucent
is finished we can push the new controller
the controller is instantiated before the animation code */
[self.navigationController pushViewController:controller animated:YES];
}];
Потім viewDidAppear:
я просто повертаю це назад:
[UIView animateWithDuration:0.1
animations:^{
_tabBar.barTintColor = nil;
_tabBar.translucent = YES;
}];
Особливо невелика зміна зовнішнього вигляду, але це ледь помітно, і це набагато краще, ніж тінь під навігаційною панеллю.
Сподіваюся, це допоможе іншим залишати бари напівпрозорими, доки Apple не виправить цю поведінку, оскільки бари САМІ мають бути прихованими в деяких випадках, на відміну від того, як пропонувалося в інших публікаціях, спеціально для UITabBar
darkColor
те, що представлення все ще є і спричиняє цю проблему.