Ios UITabBarController中的TableView内容插入
我在UITabBarController中有4个UITableViewController。它们都使用相同的UITableViewController类,但在最后三个控制器上,tableView未正确显示:tableView的顶部显示在导航栏下,而第一个则正确显示 我试图通过编程方式在“MCVigiliteCsingleColorViewController”类(继承自UITableViewController)中设置tableView内容Inset来解决此问题,但它应用于我的四个控制器(然后我的第一个UITableViewController的tableView现在有一个错误的帧…) 在故事板中,我的4个UITableViewController也使用相同的类,它们都是相同的:我的4个ViewController完全相同。第二、第三和第四个控制器是第一个控制器的“复制/粘贴”(我刚刚更改了barItemText)。然后,它们都有相同的选项被选中和取消选中。顺便说一下,选中“underTopBard”选项对我显示的控制器没有影响。我只是不明白为什么它们的显示方式不同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来解决此问题,但它应用于我的四个控制器(然
你能帮帮我吗?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)。然后,它们都有相同的选项被选中和取消选中。顺便说一下,选中此选项对我显示的控制器没有影响。