我正在更新我的应用程序以使用iOS 7,我遇到了表视图的问题。我的标签栏是半透明的。问题是当我滚动到表格视图的底部时,最后一个单元格的一部分仍然位于标签栏的后面。我想在最后一个单元格和标签栏之间留出一点空间。我可以通过使用不透明的标签栏来解决这个问题,但我希望保持半透明。
答案 0 :(得分:40)
尝试设置
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = NO;
self.automaticallyAdjustsScrollViewInsets = NO;
在tableview控制器内部
答案 1 :(得分:17)
Swift 4.x
let adjustForTabbarInsets: UIEdgeInsets = UIEdgeInsetsMake(0, 0, self.tabBarController!.tabBar.frame.height, 0)
self.yourTableView.contentInset = adjustForTabbarInsets
self.yourTableView.scrollIndicatorInsets = adjustForTabbarInsets
答案 2 :(得分:16)
检查屏幕截图
检查底栏下面的Bar和Un-checke
答案 3 :(得分:7)
SWIFT 3
将其放在viewDidLoad
的{{1}}内:
tableViewController
答案 4 :(得分:6)
这对我有用。在Custom 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;
}
答案 5 :(得分:0)
如果任何视图显示在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中的复选框来解决此问题),这是我找到的最佳解决方案。
答案 6 :(得分:0)
如果没有详细信息或实际代码,很难解决问题。在我的项目中,我在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
}
答案 7 :(得分:0)
不确定我喜欢这个解决方案,但它对我有用。
使用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
}
}
答案 8 :(得分:0)
这对我有用
override func viewDidLoad() {
self.edgesForExtendedLayout = UIRectEdge()
self.extendedLayoutIncludesOpaqueBars = false
}
答案 9 :(得分:0)
最好的方法是将 TabBarController Embed TabBarController 到您的 ViewController(编辑器 -> 嵌入 -> TabBar 控制器)并将 tableview 的底部设置为 安全区域的底部强>视图控制器。其他方式不会像这种方式那么完美。
答案 10 :(得分:-7)
您需要调整表格视图的高度。只需将49px留在底部,因为标签栏高度为49像素。调整表格视图的高度,使其在其下方留出49px的空间。