[英]TableView Showing Behind Tab Bar
我正在更新我的应用程序以使用 iOS 7,但我在使用表格视图时遇到了问题。 我的标签栏是半透明的。 问题是当我滚动到表格视图的底部时,最后一个单元格的一部分仍然在标签栏后面。 我想在最后一个单元格和标签栏之间留一点空间。 我可以通过使用不透明的标签栏来解决这个问题,但我想让它保持半透明。
尝试设置
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = NO;
self.automaticallyAdjustsScrollViewInsets = NO;
在 tableview 控制器内部
斯威夫特 4.x
let adjustForTabbarInsets: UIEdgeInsets = UIEdgeInsetsMake(0, 0, self.tabBarController!.tabBar.frame.height, 0)
self.yourTableView.contentInset = adjustForTabbarInsets
self.yourTableView.scrollIndicatorInsets = adjustForTabbarInsets
检查屏幕截图
检查下顶部栏和取消底部栏下的检查
斯威夫特 3
把它放在你的tableViewController
viewDidLoad
中:
self.edgesForExtendedLayout = UIRectEdge()
self.extendedLayoutIncludesOpaqueBars = false
self.automaticallyAdjustsScrollViewInsets = false
这对我有用。 在您的自定义 ViewController 中:
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;
}
不确定我喜欢这个解决方案,但它对我有用。
使用 iOS 11 我没有问题,我只是在viewDidLoad()
使用以下内容:
self.collectionView.bottomAnchor.constraint(self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true
但是在 iOS 10 上,我需要像这样破解我的方法:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let tabBarHeight: CGFloat = (self.parent?.tabBarController?.tabBar.frame.size.height)!
if #available(iOS 11.0, *) {
} else {
self.collectionView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor, constant: -tabBarHeight).isActive = true
}
}
这对我有用
override func viewDidLoad() { self.edgesForExtendedLayout = UIRectEdge() self.extendedLayoutIncludesOpaqueBars = false }
如果任何视图显示在 UITabBar 后面,您可以获取 bottomLayoutGuide 并在运行时进行调整。 我所做的是有一个 BaseViewController,我的所有视图控制器都继承自它。 然后,如果标签栏可见,我们可以像这样调整视图:
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 中的复选框来解决此问题),因此这是我找到的最佳解决方案。
如果没有详细信息或实际代码,很难解决问题。 我的项目中 UItabBar 后面有类似的 tabview 问题。 这里提供的解决方案在我的情况下不起作用。 在探索了我的代码之后,我找到了适合我的案例的解决方案。
这是我的案例的简要说明。 我在主视图中有一个带有两个选项卡按钮的 UItabBar。 在一个选项卡视图中,有表格视图。 如果用户点击一行,则使用导航控制器显示详细信息视图。 在详细视图中,标签栏被隐藏,工具栏显示在底部。
为了在主视图被带回时带回标签栏并隐藏工具栏,我必须在 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 或滚动视图的内容插入已经基于底部没有栏设置。 这就是为什么我的 tableView 在底部栏后面。
我找到的解决方案是在 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
}
最好的方法是将 TabBarController 嵌入到您的 ViewController(编辑器 -> 嵌入 -> TabBar 控制器)并将 tableview 的底部设置为 viewcontroller安全区域的底部。 其他方式不会像这种方式那么完美。
您需要调整表格视图的高度。 只需在底部留下 49 像素,因为标签栏高度为 49 像素。 调整 table view 的高度,使其下方留出 49px 的空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.