隐藏在导航栏下的Tableview(但仅适用于一个选项卡)

时间:2014-05-31 06:43:57

标签: ios objective-c uitableview

我正在使用带有故事板和自动布局的Xcode 5。我的观点是:

  • 根导航视图
  • 标签视图控制器(导航视图的默认视图)
  • 两个标签页视图

在两个标签视图中,我在其上放置了一个UITableView,并设置了标准的IB内容。两个选项卡视图控制器在设置方面几乎完全相同(它们都来自UIViewController)。

然而,对于桌面视图来说,事情很奇怪。第一个表视图具有正确的设置,其中单元格从“导航下方”开始,您可以向上滚动它。第二个表视图以“在导航下”的单元格开头 - 似乎插图是错误的。

但是为什么仅仅第二个标签视图出错,而不是第一个?我也没有做任何时髦的事情,我多次仔细检查代码,以确保两个tableview控制器几乎相同(除了单元格内容)。

(在第二张图片上,注意“Carrier”状态栏下的绿色位)。

First tab view - looks right

Second tab view - looks wrong

12 个答案:

答案 0 :(得分:21)

我曾经遇到过同样的问题。

尝试在视图控制器的“属性”检查器中切换“顶部条形图”。

这对我有用。希望它也适合你。感谢。

答案 1 :(得分:4)

可悲的是,如果您将TabBarController作为NavigationController的RootViewController(导航 - > Tab - > Table View C,表视图C),这将会发生。修复可能是为每个表视图提供他们自己的导航控制器(Tab - >(Nav - > Table View C),(Nav - > Table View C)虽然这可能不适用于所有需要的设计,但它可以工作我的情况(和你的情况一样)

答案 2 :(得分:3)

尝试切换"调整滚动视图插图"在视图控制器的属性检查器中。你想要它勾选。

enter image description here

答案 3 :(得分:3)

经过一番调查后,我发现了这个问题。问题是我的标签栏控制器不是根,但导航控制器是。一旦我将标签栏控制器设置为根,并将导航器放在不同的标签中,所有内容都已修复。

How to eliminate "two-stage rotation" warning?

答案 4 :(得分:2)

此处的回复之一有所帮助和有效:How do I make my iOS7 UITableViewController NOT appear under the top status bar?

如果有人还在读这个帖子:

对我来说有用的是取消选中父标签栏控制器中的“扩展边缘”选项。这在iOS7和iOS6中提供了一致的行为。

答案 5 :(得分:1)

老问题,但是我想告诉我在我尝试过的许多解决方案之后如何解决了我的问题。

我通过调用edgesForExtendedLayout解决了它,所以它不会在导航后面。

self.edgesForExtendedLayout = UIRectEdge.None

答案 6 :(得分:1)

这次有用的是取消选中ViewController属性检查器上的 Extend Edges“在顶栏下”

enter image description here

答案 7 :(得分:1)

在我的情况下,我的结构是NavVC -> Tabbbar -> Tabs VCs.我在VC 20px下拉的选项卡中有视图。我尝试了所有这些答案,但没有奏效。 对我有用的是Tabbbar -> Under Top Bars -> unchecked.NavVC and TabsVCs未触及。

答案 8 :(得分:1)

viewDidLoad 中添加以下内容为我工作

self.edgesForExtendedLayout = []

答案 9 :(得分:0)

我找到了一个带标签的解决方案。在viewDidAppear

中添加此内容
let topOffest = CGPointMake(0, -(self.tableView.contentInset.top))
self.tableView.contentOffset = topOffest

答案 10 :(得分:0)

根据我的理解,故事板不允许在导航控制器中嵌入标签栏控制器,所以它看起来不像苹果推荐设计。但是,在我的一个应用程序中,我使用了这个设计,它盯着引入安全区域的iOS 11问题。

作为修复,我取消选中" Under Top Bars"我遇到问题的视图控制器的属性。

答案 11 :(得分:0)

如果一切都失败了。
tableview.contentInset = UIEdgeInsetsMake(28, 0, 0, 0)