iOS15切换不同方向根视图控制器时如何禁用状态栏过渡动画
问题修复方案
你遇到的是iOS15及以上系统修改根视图控制器时,系统默认强制插入状态栏过渡动画的兼容问题,可通过以下几种方案解决:
方案1:切换时包裹无动画块(最简单通用)
赋值根视图控制器时用系统无动画执行块包裹,同时强制刷新布局和状态栏样式:
// 注意你原代码的==是比较运算符,赋值需要用= [UIView performWithoutAnimation:^{ window.rootViewController = viewController; // 强制立即刷新状态栏属性 [viewController setNeedsStatusBarAppearanceUpdate]; // 立即完成window的所有布局操作,跳过动画过程 [window layoutIfNeeded]; }];
方案2:全局临时禁用动画
如果方案1仍有残留动画,可以临时关闭全局视图动画,切换完成后恢复:
BOOL originAnimationState = [UIView areAnimationsEnabled]; [UIView setAnimationsEnabled:NO]; window.rootViewController = viewController; [window makeKeyAndVisible]; [window layoutIfNeeded]; [UIView setAnimationsEnabled:originAnimationState];
方案3:自定义转场完全接管切换逻辑
如果需要完全控制系统切换行为,使用window的转场API覆盖默认动画:
[UIView transitionWithView:window duration:0 options:UIViewAnimationOptionTransitionNone animations:^{ window.rootViewController = viewController; } completion:nil];
内容的提问来源于stack exchange,提问作者jptsetung
相关产品推荐
相关产品推荐

