显示在标签栏后面的TableView

时间:2014-01-02 13:45:19

标签: ios objective-c uitableview ios7 uitabbar

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

enter image description here

11 个答案:

答案 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)

检查屏幕截图

enter image description here

检查底栏下面的Bar和Un-checke

答案 3 :(得分:7)

SWIFT 3

将其放在viewDidLoad的{​​{1}}内:

tableViewController

答案 4 :(得分:6)

Swift 3.0

这对我有用。在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的空间。