显示在标签栏后面的TableView

我正在更新我的应用程序使用iOS 7,我有一个表视图的问题。 我的标签栏是半透明的。 问题是当我滚动到我的表视图的底部,最后一个单元格的一部分仍然在标签栏后面。 我想在最后一个单元格和标签栏之间留出一点空间。 我可以通过使用一个不透明的标签栏来解决这个问题,但是我想保持它半透明。

在这里输入图像说明

尝试设置

self.edgesForExtendedLayout = UIRectEdgeNone; self.extendedLayoutIncludesOpaqueBars = NO; self.automaticallyAdjustsScrollViewInsets = NO; 

在tableview控制器里面

检查屏幕截图

在这里输入图像说明

检查底部酒吧底下的酒吧和取消支票

Swift 3.0

这是为我工作。 在你的自定义视图控制器中:

 override func viewDidLoad() { super.viewDidLoad() let adjustForTabbarInsets: UIEdgeInsets = UIEdgeInsetsMake(self.tabBarController!.tabBar.frame.height, 0, 0, 0); //Where tableview is the IBOutlet for your storyboard tableview. self.tableView.contentInset = adjustForTabbarInsets; self.tableView.scrollIndicatorInsets = adjustForTabbarInsets; } 

SWIFT 3

把它放在你的tableViewController viewDidLoad里面:

 self.edgesForExtendedLayout = UIRectEdge() self.extendedLayoutIncludesOpaqueBars = false self.automaticallyAdjustsScrollViewInsets = false 

Swift 4.x

 let adjustForTabbarInsets: UIEdgeInsets = UIEdgeInsetsMake(0, 0, self.tabBarController!.tabBar.frame.height, 0) self.yourTableView.contentInset = adjustForTabbarInsets self.yourTableView.scrollIndicatorInsets = adjustForTabbarInsets 

如果在UITabBar后面显示任何视图,则可以抓取bottomLayoutGuide并在运行时进行调整。 我所做的是有一个BaseViewController,所有我的视图控制器inheritance。 然后,如果标签栏是可见的,我们调整视图像这样:

 import UIKit class BaseVC: UIViewController { override func viewDidLoad() { super.viewDidLoad() } override func viewDidLayoutSubviews() { //Ensures that views are not underneath the tab bar if tabBarController?.tabBar.hidden == false { var viewBounds = self.view.bounds; var bottomBarOffset = self.bottomLayoutGuide.length; self.view.frame = CGRectMake(0, 0, viewBounds.width, viewBounds.height - bottomBarOffset) } } } 

由于我不使用故事板(在IB中点击checkbox来解决这个问题),这是我find的最好的解决scheme。

没有详细信息或实际的代码就很难解决问题。 在我的项目中,我有类似的UItabBar背后的tabview问题。 这里提供的解决scheme不适用于我的情况。 在探索我的代码后,我find了一个解决scheme。

这里是我的情况的简要解释。 我有一个UItabBar在主视图中有两个选项卡button。 在一个选项卡视图中,有表格视图。 如果用户点击一行,则使用导航控制器来呈现详细视图。 在详细视图中,标签栏是隐藏的,工具栏显示在底部。

为了使标签栏回来并隐藏工具栏,当主视图被带回时,我必须在viewWillAppear事件中显式地显示标签栏和隐藏工具栏:

 class myMainViewController: UITableViewController { private var tabBarHidden: Bool? = { didSet { self.tabBarController?.tabBar.isHidden = tabBarIsHidden ?? true } } private var toolBarIsHidden: Bool? { didSet { let hidden = toolBarIsHidden ?? true self.navigationController?.toolbar.isHidden = hidden self.navigationController?.setToolbarHidden(hidden, animated: true) } } ... override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.tabBarIsHidden = false self.toolBarIsHidden = true } ... } 

我终于意识到底部栏的可见性是在viewWillAppear的情况下设置的。 那时候,tableView或scroll view的内容插件已经根据底部的没有栏设置了。 这就是为什么我的tableView是在底部栏之后。

我发现的解决scheme是在viewDidAppear事件中重置内容插入:

 override func viewDidAppear(_ animated: Bool) { // In the event of viewWillAppear, visibilities of tool bar and tab bar are set or changed, // The following codes resets scroll view's content insets for tableview let topInset = self.navigationController!.navigationBar.frame.origin.y + self.navigationController!.navigationBar.frame.height let adjustForTabbarInsets: UIEdgeInsets = UIEdgeInsetsMake( topInset, 0, self.tabBarController!.tabBar.frame.height, 0) self.tableView.contentInset = adjustForTabbarInsets self.tableView.scrollIndicatorInsets = adjustForTabbarInsets } 

对于那些将使用@ Spentak解决scheme的人来说,这个代码在iOS版本11.x之后陷入了一个无限循环,因为下面这一行;

self.view.frame = CGRectMake(0,0,viewBounds.width,viewBounds.height – bottomBarOffset)

此行一次又一次触发viewDidLayoutSubviews()。 小心这个。

您需要调整表视图的高度。 只需在底部保留49px,因为tabbar的高度是49px。 调整表视图的高度,使其下面留下49px的空间。