Подтвердить что ты не робот

TableView Showing Behind Tab Bar

Я обновляю свое приложение, чтобы использовать iOS 7, и у меня проблема с табличным представлением. Моя панель вкладок полупрозрачна. Проблема заключается в том, когда я просматриваю нижнюю часть таблицы, часть последней ячейки все еще находится за панелью вкладок. Я хотел бы иметь немного пространства между последней ячейкой и панелью вкладок. Я мог бы исправить это, используя вместо этого непрозрачную панель вкладок, но я хочу, чтобы она была полупрозрачной.

enter image description here

4b9b3361

Ответ 1

Попробуйте установить

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

Внутри контроллера таблицы просмотра

Ответ 2

Проверьте снимок экрана

enter image description here

Проверьте нижнюю панель и Un-checke под нижней панелью

Ответ 3

Swift 3.0

Это то, что сработало для меня. В пользовательском 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;
}

Ответ 4

SWIFT 3

поместите это внутри viewDidLoad вашего tableViewController:

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

Ответ 5

Swift 4.x

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

Ответ 6

Если какое-либо представление отображается за UITabBar, вы можете захватить нижний элементLayoutGuide и внести корректировки во время выполнения. У меня есть 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, чтобы исправить эту проблему), это было лучшее решение, которое я нашел.

Ответ 7

Очень сложно решить проблему без подробной информации или фактических кодов. У меня есть аналогичная проблема с tabview за UItabBar в моем проекте. Предлагаемые здесь решения не работают в моем случае. Изучив мои коды, я нашел решение для своего дела.

Вот краткое объяснение моего дела. У меня есть 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 находится за нижней панелью.

Решение, которое я нашел, это reset вставки содержимого в случае 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 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
}

Ответ 8

Для тех, кто будет использовать решение @Spentak, этот код попадает в бесконечный цикл после iOS версии 11.x из-за этой следующей строки;

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

эта строка вызывает снова и снова viewDidLayoutSubviews(). Будьте осторожны.

Ответ 9

Вам нужно настроить высоту представления таблицы. Просто оставьте 49px внизу, так как высота табуляции составляет 49 px. Отрегулируйте высоту стола так, чтобы он оставил пространство размером 49 пикселей ниже.