导航栏项目不是垂直居中的

时间:2016-03-28 08:53:12

标签: ios swift uinavigationbar

我正在尝试将navigationBar的所有元素放在垂直中心,但我不知道该怎么做?

iPhone screenshot showing items aligned vertically below the center

黄色上方的灰色部分是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);

4 个答案:

答案 0 :(得分:0)

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

<div class="tag"><h1 class="someclass"></h1></div>

.someclass {
    css;
}

或者,如果您想要自定义字体,请尝试以下方法:

self.title="Test title"

答案 1 :(得分:0)

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

您需要删除状态栏,这会降低导航栏的高度。由于存在基于项目设置和上下文隐藏状态栏的不同方法,因此我不会指示如何删除状态栏,但是有关如何执行此操作的信息可以广泛使用。

一旦删除了额外的空间,您的物品将垂直居中。

答案 2 :(得分:0)

导航栏文字/项目永远不会以您显示内容的方式居中。从技术上讲,它们已经在导航栏中居中,但导航栏管理居中,并将所有元素限制在导航栏的下边缘。

状态栏需要20px。导航栏的高度应为44px。导航栏的顶部应约束到顶部布局边距,而不是顶部视图边界本身。这样做的原因是,当设备翻转为横向模式时,ios会移除状态栏(实际上是纵向模式中任何显示的前20px)。如果您的导航栏为44px,将设备切换为横向模式将显示文本正确垂直居中。

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

然后当您来回翻转设备时,您会看到文本始终在导航栏中居中,状态栏将在导航栏上方移动。

PS。首先在故事板中执行此操作,这是最简单的方法。

答案 3 :(得分:0)

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

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

你的ViewController看起来像这样:

enter image description here

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