iOS 7 UIToolBar覆盖状态栏

我已将我的项目从iOS 6升级到iOS 7,但似乎有一点问题。 状态栏和工具栏重叠并且彼此非常接近。 之前通过在故事板中手动拖动工具栏来添加工具栏。 这是它出现的方式:

工具栏

我已经看到一些问题,建议使用“positionForBar:”和“ – (UIBarPosition)positionForBar:(id)bar”但我不确切知道如何使用它们,一点点解释和简单的方法来做到这一点帮帮我。 谢谢!

更新:以下是一些还需要修复的代码。 之前工作正常,但由于detailviewcontroller(WebViewController)现在嵌入在导航控制器中,下面的代码导致exception。 看起来我需要修改此方法中的第一行。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { WebViewController *wvc = [self.navigationController.parentViewController childViewControllers][1]; RSSItem *entry = [[channel items] objectAtIndex:[indexPath row]]; wvc.title = entry.title; wvc.urlString = entry.link; } 

如果您的设置是拆分视图,例如具有两个容器视图的设置,您应该能够执行此操作。 设置容器视图时,向上拖动直到看到指示顶部位于状态栏底部的蓝色虚线。 使用两个容器视图执行此操作。 将工具栏添加到嵌入式控制器(而不是容器视图),固定到该控制器视图的顶部。 左侧视图嵌入导航控制器后,我的屏幕如下所示:

在此处输入图像描述

 _toolBar.delegate = self; - (UIBarPosition)positionForBar:(id )bar { CGRect frame = _toolBar.frame; frame.origin = CGPointMake(0, [UIApplication sharedApplication].statusBarFrame.size.height); _toolBar.frame = frame; return UIBarPositionTopAttached; } 

肖像酒吧

景观酒吧

您的视图的顶部约束不再是超级视图的顶部空间,而是顶部空间顶部布局指南。

您可以通过将状态栏下方的顶部空间向下移动,然后使用约束菜单将约束添加到最近的邻居(现在应该是顶部布局指南),或者您可以按照Apple上此链接中的说明执行此操作。开发者库 。

请记住,您不应仅仅因为以下两个原因而在IB中移动:

  1. 与iOS 6不兼容
  2. 不会延长状态栏下的顶栏背景效果

什么不该做......

因此,如果您想要兼容iOS6和iOS7,则可以为需要在ViewDidLoad中进行自定义的对象添加条件。 警告这是最后一种情况 – 总是尝试用autolayout / IB来补救它:

 #import  #ifdef __IPHONE_7_0 CGRect barFrame = topBar.frame; barFrame.origin = CGPointMake(0, [UIApplication sharedApplication].statusBarFrame.size.height); [topBar setFrame:barFrame]; // move other stuff around too #endif 

并设置你的酒吧代表就像上面的Luniz,覆盖positionForBar

 topBar.delegate = self; - (UIBarPosition)positionForBar:(id )bar { return UIBarPositionTopAttached; } 

我试图做同样的事情,但我不喜欢接受的答案的白色状态栏。 我设法将工具栏放在状态栏下方,以便它与主视图中旁边的导航栏具有一致的颜色。

我的解决方案是让工具栏高64点,并将Topspace设置为superview为0。

执行此操作时,您必须确保未创建“顶部空间布局指南”的约束。 通过将Frame设置为0,0,高度为64,我可以在Interface Builder中完成这项工作。然后我使用浮动工具菜单中的Pin对话框。 我使用顶部I梁的零来创建约束。

底部边缘在Master和Detail中匹配,并且着色是一致的。 我的工具栏中的控件最终变得不拥挤。

斯威夫特3

连接您的bar委托并符合UIToolbarDelegate。 然后添加此委托方法:

 func position(for bar: UIBarPositioning) -> UIBarPosition { return UIBarPosition.topAttached } 

因为现在

 enum UIBarPosition : Int { case any case bottom case top case topAttached } 
Interesting Posts