Parece acontecer com qualquer barra (TabBar ou ToolBar) que é translúcida.
Portanto, uma maneira de corrigir isso é definir o _tabBar.translucent = NO;
(no meu caso). Isso evita a sombra indesejada sob a barra de navegação superior, deixando a barra de navegação translúcida. Infelizmente, a barra inferior não é mais translúcida.
Pode ser definido de volta para translúcido, mas tudo isso tem que acontecer depois que toda a animação de empurrar for concluída, portanto, a alteração dessa propriedade é bem perceptível.
No caso, no entanto, a barra inferior também deve ser translúcida e não quero que o usuário veja a alteração, resolvi com o seguinte:
/* 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];
}];
Então, no viewDidAppear:
eu simplesmente reverto isso:
[UIView animateWithDuration:0.1
animations:^{
_tabBar.barTintColor = nil;
_tabBar.translucent = YES;
}];
Há apenas uma pequena mudança na aparência, especialmente, mas é quase imperceptível e é muito melhor do que ter a sombra sob a barra de navegação.
Espero que ajude outras pessoas a manter as barras translúcidas até que a Apple conserte esse comportamento, já que as barras SÃO destinadas a ficar ocultas em alguns casos, ao contrário do que foi sugerido em outros posts especialmente para o UITabBar
darkColor
visualização ainda está lá e causa este problema.