导航栏项目未垂直居中

navigationbar items not centered vertically

我想将导航栏的所有元素都放在垂直中心,但我不知道该怎么做?

黄色上面的灰色部分是navigationBar。正如我们所看到的,导航栏的标题和其他元素没有垂直居中。

我该怎么做?

到目前为止我的代码:

    let navigationItem = UINavigationItem()  
    navigationItem.title = sTitle;      
    navigationBar.frame = CGRectMake(0,0,screenwidth, 50);
    navigationBar.titleTextAttributes = [ NSFontAttributeName: titleFont, NSForegroundColorAttributeName: UIColor.blackColor()]
    self.view.addSubview(navigationBar);

首先尝试使用原生方法设置导航栏标题,如:

self.title="Test title"

或者,如果您想使用自定义字体,请试试这个:

self.navigationController.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "CustomFont", size: 15)!]

如评论中所述,这些元素未垂直居中的原因是显示状态栏,它在导航栏顶部保留了 10 个点。它只是不容易看到,因为它使用的是浅色内容样式。如果您的电池电量低或正在充电,您会在右上角看到电池。

您需要删除状态栏,这会降低导航栏的高度。由于根据项目设置和上下文有不同的隐藏状态栏的方法,我不会指导如何删除状态栏,但有关如何删除状态栏的信息已广泛提供。

删除多余的 space 后,您的项目将垂直居中。

导航栏 text/items 永远不会像您显示内容那样居中。从技术上讲,它们已经在导航栏中居中,但导航栏管理居中,并将所有元素限制在导航栏的下边缘。

状态栏需要 20px。导航栏的高度应为 44 像素。导航栏的顶部应该被限制在顶部布局边距,而不是顶部视图边界本身的 0。这样做的原因是当设备翻转到横向模式时,ios 删除了状态栏(实际上是纵向模式显示的顶部 20px)。如果您的导航栏是 44 像素,将设备切换到横向模式将显示文本正确地垂直居中。

要让您看到所有这些,我建议您在导航栏上方创建一个小视图。使视图高 20 像素,将其限制在 View.Top(不是边距),并将背景或色调设置为亮绿色或其他颜色。然后将导航栏设置为 44px,将其限制在顶部布局边距指南(不是刚创建的状态视图的底部,也不是偏离 View.Top 边界)。

然后当您来回翻转设备时,您会看到您的文本始终位于导航栏的中央,并且状态栏会在导航栏上方来回移动。

PS。首先在情节提要中执行此操作,这样最简单。

如果隐藏状态栏,您可以将所有元素居中,这可以通过将以下内容添加到 Info.plist 来实现:

<key>UIStatusBarHidden</key>
<true/>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>  

你的 ViewController 看起来像这样:

您可以在link中看到更多隐藏状态栏的方法:hide Status bar