Ios UITabBarController中的TableView内容插入

Ios UITabBarController中的TableView内容插入,ios,iphone,objective-c,uitableview,uitabbarcontroller,Ios,Iphone,Objective C,Uitableview,Uitabbarcontroller,我在UITabBarController中有4个UITableViewController。它们都使用相同的UITableViewController类,但在最后三个控制器上,tableView未正确显示:tableView的顶部显示在导航栏下,而第一个则正确显示 我试图通过编程方式在“MCVigiliteCsingleColorViewController”类(继承自UITableViewController)中设置tableView内容Inset来解决此问题,但它应用于我的四个控制器(然

我在UITabBarController中有4个UITableViewController。它们都使用相同的UITableViewController类,但在最后三个控制器上,tableView未正确显示:tableView的顶部显示在导航栏下,而第一个则正确显示

我试图通过编程方式在“MCVigiliteCsingleColorViewController”类(继承自UITableViewController)中设置tableView内容Inset来解决此问题,但它应用于我的四个控制器(然后我的第一个UITableViewController的tableView现在有一个错误的帧…)

在故事板中,我的4个UITableViewController也使用相同的类,它们都是相同的:我的4个ViewController完全相同。第二、第三和第四个控制器是第一个控制器的“复制/粘贴”(我刚刚更改了barItemText)。然后,它们都有相同的选项被选中和取消选中。顺便说一下,选中“underTopBard”选项对我显示的控制器没有影响。我只是不明白为什么它们的显示方式不同


你能帮帮我吗?Thx.

我也遇到了同样的问题,在我看来,如果
uitabarcontroller
中包含
UIViewController
的话,这听起来像是一个与
自动调整滚动视图插入相关的bug。我通过将下面的代码添加到我的
viewDidLoad
,解决了这个问题:

self.automaticallyAdjustsScrollViewInsets = NO;

CGFloat statusBarHeight = [UIApplication sharedApplication].statusBarFrame.size.height;
CGFloat navigationBarHeight = self.navigationController.navigationBar.frame.size.height;
CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height;
self.internalTableView.contentInset =
  self.internalTableView.scrollIndicatorInsets =
    UIEdgeInsetsMake(statusBarHeight + navigationBarHeight, 0, tabBarHeight, 0);

其中,
internalTableView
是一个
UIScrollView
,例如
UITableView

在UINavigationController中嵌入UITableViewController为我解决了这个问题。从故事板上看这很容易。只需选择UITableViewController,然后转到编辑器>嵌入>导航控制器。

我也遇到了同样的问题,在没有找到导致此问题的真正正确原因后,我决定加入“黑客”来修复它

这就是为什么我添加了这个,它很快,但您可以将其转换为objective-c easy:

    var navBarHeight:CGFloat = 0
    if let nc = self.navigationController {
        navBarHeight += nc.navigationBar.frame.height
        navBarHeight += UIApplication.sharedApplication().statusBarFrame.size.height
    }

    //iterate over vc's
    if let vc = self.viewControllers {
        //enumerrate allows for the tuple, setting a key
        for (key, c) in enumerate(vc) {
            //first view displays correctly
            if (key > 0) {
                if let controller = c as? BaseListViewController {
                    controller.automaticallyAdjustsScrollViewInsets = false
                    controller.tableView.contentInset = UIEdgeInsets(
                        top: navBarHeight,
                        left: 0,
                        bottom: 0,
                        right: 0
                    )
                }
            }
        }
    }
    super.viewDidLoad()
这是在我的UITabBar的基类中(我显然扩展了它)。 基本上,它会检查是否有多个选项卡,其中应该有第二个选项卡,++会将其内容插入调整为在顶部有额外的内容,类似于导航栏+状态栏


我希望这对其他人有所帮助。

检查第一个视图控制器上是否选中了“在顶部和底部栏下延伸”。我忘了说在故事板中,我的4个视图控制器完全相同。第二、第三和第四个控制器是第一个控制器的“复制/粘贴”(我刚刚更改了barItemText)。然后,它们都有相同的选项被选中和取消选中。顺便说一下,选中此选项对我显示的控制器没有影响。