present到带有导航栏的viewController,导航栏会消失的问题

本文详细介绍了在iOS应用中如何确保登录界面的导航栏始终可见,通过实例展示了如何使用Swift创建并呈现带有导航栏的UIViewController,并解决在不同场景下导航栏可能消失的问题。

present到带有导航栏的viewController,要获取到登陆界面的导航栏,再present,不然导航栏会不见


TDOALoginViewController *login = [[TDOALoginViewController alloc] init];
NavViewController *nav = [[NavViewController alloc] initWithRootViewController:login];
[self presentViewController:nav animated:YES completion:nil];
### 解决 iOS 应用中导航栏覆盖弹出框的问题 当处理 iOS 中的弹出视图时,如果遇到导航栏遮挡弹出窗口的情况,可以采取多种方法来解决问题。以下是几种常见的解决方案: #### 方法一:调整模态展示样式 通过设置 `modalPresentationStyle` 属性为 `.overFullScreen` 或者 `.fullScreen` 可以改变弹窗显示的方式,从而避免被导航条所掩盖。 ```swift let viewController = UIViewController() viewController.modalPresentationStyle = .overFullScreen // or .fullScreen present(viewController, animated: true, completion: nil) ``` 这种方法适用于希望整个屏幕都被新控制器占据的情形[^1]。 #### 方法二:手动调整弹出视图的位置 另一种方式是在创建自定义弹出视图之后,在其加载完成后立即调整 frame 来避开顶部区域。这通常涉及到获取当前设备状态栏高度以及可能存在的透明导航栏的高度,并相应地偏移弹出层位置。 ```swift if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene { let statusBarHeight = windowScene.statusBarManager?.statusBarFrame.height ?? 0 popupView.frame.origin.y += navigationController?.navigationBar.frame.size.height ?? 0 + statusBarHeight } ``` 此代码片段考虑到了不同型号 iPhone 的安全边距差异,确保即使在带有圆角屏或刘海屏的设计下也能正常工作。 #### 方法三:利用 Safe Area Layout Guides 对于现代版本的 Xcode 和 Storyboards/XIB 文件来说,推荐的做法是启用自动布局并依赖于 safe area guides 进行界面设计。这样做的好处在于无论是否存在物理按钮或是异形切割屏幕都能得到妥善处理。 ```xml <view ...> <!-- 设置约束条件 --> <constraints> <constraint firstItem="popupView" firstAttribute="top" secondItem="superview" secondAttribute="safeArea.top"/> ... </constraints> </view> ``` 上述 XML 片段展示了如何配置 Interface Builder 中的对象关系,使得子视图始终位于父容器的安全区域内。 #### 方法四:使用第三方库简化操作 考虑到实际开发过程中可能会面对更复杂的需求场景,有时借助成熟的开源项目会更加高效便捷。例如 MITE 工具提供了丰富的设备模拟环境用于测试移动网页内容兼容性等问题[^2];而对于原生 App 开发而言,则有诸如 TSMessages、EZAlertController 等专门针对提示信息管理优化过的框架可供选用。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值