Sur IOS26 est apparu un bug sur mes vieilles applications. La barre système se retrouve au-dessus de mon application, mais tout revient dans l'ordre après une rotation de l'appareil.
Après quelques recherche, c'est un bug IOS26 que de nombreux développeurs ont... Mais sans vraie solution. En fait c'est le SafeArea de la vue principale qui ne contient pas de marge top avant la rotation. Une solution serait d'en mettre une, mais SafeAreaInets est en lecture seule. Il faut utiliser additionalSafeAreaInsets du viewController à la place :
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if(@available(iOS 26,*)) {
if(self.view.safeAreaInsets.top==0) {
UIEdgeInsets insets = UIEdgeInsetsMake(32, 0, 0, 0);;
self.additionalSafeAreaInsets = insets;
}
}
Mais ce n'est pas suffisant, car après rotation le SafeAreaInets est bon, et donc le additionnalSafeAreaInsets doit être remis à zéro :
-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
if(@available(iOS 26,*)) {
self.additionalSafeAreaInsets = UIEdgeInsetsZero;
}
Il faut se mettre dans le viewWillTransitionToSize:withTransitionCoordinator: qui est appelée lors d'une rotation, et mettre à zéro le additionnalSafeAreaInsets.
On ne peut pas se mettre dans le viewDidLayoutSubviews car le changement de additionnalSafeAreaInsets peut relancer le changement de layout en boucle.
Commentaires