导航栏项目垂直居中未对齐

3
我正在尝试将navigationBar的所有元素垂直居中,但我不知道如何做?

iPhone screenshot showing items aligned vertically below the center

黄色区域上方的灰色部分是navigationBar。我们可以看到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);

3
状态栏的高度是20像素,而你的状态栏颜色是白色,所以你看不到它。 - undefined
请你能否添加一些代码来声明 navigationBar?为什么要在视图控制器的视图中添加导航栏,它应该来自 navigationController/ViewController。 此外,正如 Ashish 所说,你已经计算了导航栏中的 20 像素空间。 - undefined
4个回答

0

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

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

而你的ViewController看起来会像这样:

enter image description here

你可以在这个链接中看到更多隐藏状态栏的方法:隐藏状态栏


0

导航栏的文本/项目永远不会居中显示,就像你展示的那样。从技术上讲,它们已经在导航栏中居中,但是导航栏管理着居中,并将所有元素限制在导航栏的下边缘。

状态栏需要20px的高度。导航栏应该是44px高。导航栏的顶部应该限制在顶部布局边距上,而不是直接限制在顶部视图边界上。原因是当设备切换到横向模式时,iOS会移除状态栏(实际上是移除纵向模式下显示的顶部20px)。如果你的导航栏高度为44px,在设备切换到横向模式时,你会发现文本在垂直方向上正确地居中。

我建议你创建一个小视图放在导航栏上方,这样你可以看到所有的内容。将该视图设置为20px高,将其限制在View.Top上(而不是限制在边距上),并将背景或者tintcolor设置为明亮的绿色或其他颜色。然后将你的导航栏设置为44px高,将其限制在顶部布局边距指南上(而不是限制在刚刚创建的状态栏视图的底部,也不是相对于View.Top边界偏移)。

然后当你来回切换设备时,你会发现你的文本始终居中在导航栏内,而状态栏会在导航栏上方出现和消失。

PS. 先在Storyboard中完成这个,这样最简单。


0

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

你需要移除状态栏,这将减小导航栏的高度。由于根据项目设置和上下文的不同,隐藏状态栏有不同的方法,我不会指示如何移除状态栏,但关于如何做到这一点的信息广泛可得。

一旦去掉了额外的空间,你的项目将会垂直居中。


非常感谢。好的,我明白了。这与状态栏有关,但是我已经使用prefersStatusBarHidden=true将状态栏移除了。但是仍然看到项目没有居中显示。 - undefined
你会发布一张新的截图吗? - undefined

0

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

self.title="Test title"

如果你想使用自定义字体,可以尝试以下方法:
self.navigationController.navigationBar.titleTextAttributes = [ NSFontAttributeName: UIFont(name: "CustomFont", size: 15)!]

谢谢你的帮助,但是没有起作用。所有的元素都没有居中。"zurück"(德语中意为返回)链接是一个导航项,也没有居中。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接