You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

登录后加载ViewController导航栏不显示,需禁止返回登录区的解决方法

问题描述

用户登录后通过以下代码跳转至新视图控制器,但出现两个问题:新视图的UINavigationBar未显示,且用户可通过返回操作回到登录页面,希望实现显示导航栏且无法返回登录区域的效果。

原代码:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *homeViewNavigationController = [storyboard instantiateViewControllerWithIdentifier:@"Tab"];
[homeViewNavigationController setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentViewController:homeViewNavigationController  animated:animated completion:nil];
解决方案

一、替换应用根控制器(推荐方案)

直接将应用的根控制器替换为目标导航控制器,登录页会被完全移除,用户无法返回,同时导航栏能正常显示。

代码示例:

iOS 12及以前(AppDelegate中处理):

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *homeNav = [storyboard instantiateViewControllerWithIdentifier:@"Tab"];
// 确保导航栏处于显示状态
homeNav.navigationBar.hidden = NO;

// 替换根控制器并添加过渡动画
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
window.rootViewController = homeNav;
[UIView transitionWithView:window
                  duration:0.3
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:nil
                completion:nil];

iOS 13及以后(SceneDelegate中处理):

若项目使用SceneDelegate,需在对应场景中替换根控制器:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UINavigationController *homeNav = [storyboard instantiateViewControllerWithIdentifier:@"Tab"];
homeNav.navigationBar.hidden = NO;

// 获取当前场景的window
UIWindowScene *windowScene = (UIWindowScene *)[[UIApplication sharedApplication] connectedScenes].allObjects.firstObject;
UIWindow *window = windowScene.windows.firstObject;
window.rootViewController = homeNav;
[UIView transitionWithView:window
                  duration:0.3
                   options:UIViewAnimationOptionTransitionCrossDissolve
                animations:nil
                completion:nil];

二、检查Storyboard配置

确保Tab导航控制器已启用导航栏:

  • 打开Main.storyboard,选中Tab导航控制器
  • 在右侧属性面板中,勾选Shows Navigation Bar选项

如果导航控制器本身未开启导航栏,无论用哪种跳转方式,导航栏都不会显示。

三、放弃present方式

presentViewController是模态展示,会保留登录页的层级,用户可通过返回操作回到登录页;同时若模态展示的导航控制器配置不当,也容易导致导航栏不显示,因此不适合用来实现登录后的跳转。

内容的提问来源于stack exchange,提问作者rihekopo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 20:42:26