swift - 如何使导航栏符合安全区域?
问题描述
我从没有导航栏的屏幕移动到有导航栏的屏幕。转到导航栏屏幕时,该栏不包含在任何安全区域约束中,并且与 iPhone X 上的状态栏重叠。我寻找了一个解决方案,但对我没有任何帮助。如何使导航栏符合 iPhone X 上的安全区域指南,使其不会重叠?另外,它的高度似乎太短了,但我想这可以通过约束来解决。
提前致谢!
应用委托:
var window: UIWindow?
var navigationController: UINavigationController?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
window = UIWindow(frame: UIScreen.main.bounds)
if let window = window{
let mainVC = ViewController()
navigationController = UINavigationController(rootViewController: mainVC)
window.rootViewController = navigationController
window.makeKeyAndVisible()
}
return true
}
这是我用来从 ViewController 移动到 AboutViewController 的方法:
@objc private func infoButtonTap(){
let aboutVC = AboutViewController()
self.navigationController?.pushViewController(aboutVC, animated: true)
}
编辑:这就是它的样子: https ://imgur.com/syuQaUn
关于VC:
此行在 viewDidLoad 中:
navigationController?.isNavigationBarHidden = false
使导航栏可见。
解决方案
如果你真的想让你的导航控制器在安全区域内。这是您的一种解决方案。
创建了一个 UIController 作为一切的基础控制器。让我们称之为
SuperParentController
。确保
SuperParentController
也是导航控制器的父级。然后您可以为您操作内容和布局,
SuperParentController
以确保导航控制器按您的意愿定位。
我们有点使用这种策略来为我们的应用展示一个可以随时展示的通用横幅。
推荐阅读
- asp.net-core - 多租户 Azure 托管的 ASP.NET Core 2.1 Web Api 上的字段级权限缓存
- python - 如何模拟 Pytest 的库类
- php - Codeigniter - Sql 数据库
- google-bigquery - 尝试在标准 SQL BigQuery 中使用 CAST 将十六进制时间戳转换为十进制
- regex - 至少 5 个字符但没有前导或尾随空格的 html 模式
- ember.js - {{#link-to}} 破坏语义 UI
- laravel - vue 应用程序中的路由器视图和组件(laravel)
- c# - 如何处理微服务中的表连接
- spring - Spring Boot Security 自定义登录页面
- javascript - api请求不工作节点