导航控制器栏无缘无故低

Navigation controller bar is low for no reason

提问人:JOHNY 提问时间:8/9/2023 最后编辑:JOHNY 更新时间:8/9/2023 访问量:41

问:

我创建了一个选项卡栏控制器,其中有 4 个导航控制器,每个控制器包含一个视图控制器,但在这些视图控制器上,栏标题非常低。无论我是否选择大标题,问题与常规标题相同。 是因为标签栏吗?

f

largetitles

smalltitles

有人知道如何解决它吗?当我为导航栏设置自定义框架时,它没有任何影响。 当我推送一个新的视图控制器时,我们无法与屏幕前 25% 中的任何内容进行交互(可能是因为它位于导航栏标题后面,即使我将其设置为无)。这真的很奇怪,我如何将标题设置得更高或只是禁用它们?

这也是我的场景委托中的内容:

let storyboard = UIStoryboard(name: "TabBar", bundle: nil).instantiateViewController(withIdentifier: "Main") as! UIViewController
let navigation = UINavigationController(rootViewController: storyboard)
window?.rootViewController = navigation
window?.makeKeyAndVisible()

标识符为“Main”的视图控制器实际上是情节提要顶部的选项卡栏,所以也许我的场景委托有问题,但我不知道为什么这会对导航栏的位置产生影响。

iOS Swift Xcode UIViageController UINuageController

评论

1赞 Sweeper 8/9/2023
请显示代码的最小可重现示例
0赞 JOHNY 8/9/2023
@Sweeper我甚至还没有使用代码,但我所做的只是在 storybard 中设置视图和导航控制器。你是说关于导航栏框架的代码?
0赞 Fogmeister 8/9/2023
您是否将层次结构创建为 -> -> ?还是 -> -> ?RootTabBarControllerNavigationControllerRootNavigationControllerTabBarController
0赞 JOHNY 8/9/2023
@Fogmeister我更新了图片,所以你可以看到,我真的不知道
0赞 Fogmeister 8/9/2023
@JOHNY谢谢,看起来你做对了。嗯。。。这真的很奇怪。你能在 GitHub 上分享这个项目吗?我可以快速浏览一下。

答:

0赞 SaTisH ShiYaNi 8/9/2023 #1

enter image description here

检查您是否选择了“首选大标题”(如果,请取消选中)。

评论

0赞 JOHNY 8/9/2023
问题是一样的。标题仍然很低
0赞 SaTisH ShiYaNi 8/9/2023
请分享您的 navigationBar Attribute Inspector 屏幕截图。
1赞 DonMag 8/9/2023 #2

您的问题中的这段代码:

// instantiate the UITabBarController with identifier "Main"
//  from Storyboard named "TabBar"
let storyboard = UIStoryboard(name: "TabBar", bundle: nil).instantiateViewController(withIdentifier: "Main") as! UIViewController

// create a new UINavigationController, with the 
//  instantiated UITabBarController as its Root View Controller
let navigation = UINavigationController(rootViewController: storyboard)

// show the navigation controller
window?.rootViewController = navigation
window?.makeKeyAndVisible()

所以,你有:

  • 导航控制器(带有自己的导航栏)
  • 拿着标签栏控制器
  • 每个选项卡都有自己的导航控制器和导航栏

将您的代码更改为此(尽管它非常令人困惑的对象命名):

// instantiate the UITabBarController with identifier "Main"
//  from Storyboard named "TabBar"
let storyboard = UIStoryboard(name: "TabBar", bundle: nil).instantiateViewController(withIdentifier: "Main") as! UIViewController

// show the tab bar controller
window?.rootViewController = storyboard
window?.makeKeyAndVisible()

可是。。。为什么不直接在项目设置中设置它?为什么要从代码中加载?

评论

0赞 JOHNY 8/10/2023
是的,这就是问题所在,谢谢你的回答。我在场景委托中执行此操作,因为我有一个 Firebase 身份验证条件来呈现视图控制器。