TableView, отображающий панель вкладок

17

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

    
задан raginggoat 02.01.2014 в 14:45
источник

9 ответов

25

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

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

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

    
ответ дан Johnykutty 02.01.2014 в 14:49
источник
10

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

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

    
ответ дан CoolMonster 02.01.2014 в 15:00
источник
5

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;
}
    
ответ дан rottenoats 07.11.2016 в 10:20
источник
4

SWIFT 3

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

self.edgesForExtendedLayout = UIRectEdge()
self.extendedLayoutIncludesOpaqueBars = false
self.automaticallyAdjustsScrollViewInsets = false
    
ответ дан mehdok 30.05.2017 в 16:36
источник
2

Swift 4.x

let adjustForTabbarInsets: UIEdgeInsets = UIEdgeInsetsMake(0, 0, self.tabBarController!.tabBar.frame.height, 0)
self.yourTableView.contentInset = adjustForTabbarInsets
self.yourTableView.scrollIndicatorInsets = adjustForTabbarInsets
    
ответ дан Hemang 08.11.2017 в 06:03
источник
0

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

    
ответ дан Spentak 23.05.2015 в 18:58
источник
0

Очень сложно решить проблему без подробной информации или фактических кодов. У меня есть аналогичная проблема с 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. В это время вставки содержимого таблицы viewView или прокрутки настроены уже на основании низа внизу. Вот почему мой 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
}
    
ответ дан David.Chu.ca 05.10.2017 в 05:10
источник
-1

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

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

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

    
ответ дан Gisiker 08.11.2017 в 15:54
источник
-7

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

    
ответ дан PunjabiCoder 02.01.2014 в 14:48
источник