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

20

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

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

10 ответов

34

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

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

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

    
ответ дан Johnykutty 02.01.2014 в 14:49
источник
  • Да, его работа, но вдруг мой tabBar изменил цвет. –  Slavcho 28.04.2014 в 16:44
  • можете ли вы указать изменение цвета, с какого цвета на какой цвет? –  Johnykutty 29.04.2014 в 08:00
  • Ну сначала был белый, а затем переменился на серый с градиентом. Но после ручной замены на белый цвет все в порядке. Просто интересно, почему это произошло. –  Slavcho 29.04.2014 в 10:58
  • Не работает, последняя ячейка все еще находится за панелью вкладок. –  towry 16.07.2017 в 17:31
12

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

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

    
ответ дан CoolMonster 02.01.2014 в 15:00
источник
  • как я могу снять его программно? я не мог сделать это программно –  dotfreelancer 03.09.2017 в 18:03
11

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
источник
  • Спасибо @Hemang, работа для меня отлично. –  Bptstmlgt 22.11.2017 в 15:49
  • Прекрасно работает на iOS 11 (как iPhone 7, так и iPhone X), не работает на iOS 10 –  inokey 26.04.2018 в 10:19
  • Спасибо, @Hemang. Меня устраивает –  Arpit B Parekh 30.04.2018 в 07:58
7

SWIFT 3

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

self.edgesForExtendedLayout = UIRectEdge()
self.extendedLayoutIncludesOpaqueBars = false
self.automaticallyAdjustsScrollViewInsets = false
    
ответ дан mehdok 30.05.2017 в 16:36
источник
  • Это работало для моей настраиваемой панели вкладок. –  Teodor Ciuraru 17.05.2018 в 08:29
6

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
источник
  • Кромка Вставка должна быть внизу, но не сверху: пусть adjustForTabbarInsets: UIEdgeInsets = UIEdgeInsetsMake (0, 0, self.tabBarController! .tabBar.frame.height, 0); –  Litome 29.03.2017 в 03:13
0

Не уверен, что мне нравится решение, но оно работает для меня.

С iOS 11 у меня нет проблем, я просто использую следующее в viewDidLoad ()

self.collectionView.bottomAnchor.constraint(self.view.safeAreaLayoutGuide.bottomAnchor).isActive = true.

Однако на iOS10 мне нужно взломать свой путь следующим образом.

% Co_de%

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
        }
    }

    

ответ дан Emmannuel Pregnolato 09.03.2018 в 19:40
источник
0

Swift 4.

В вашей программе viewDidLoad программно используйте следующие

self.collectionView.bottomAnchor.constraint(equalTo: self.bottomLayoutGuide.topAnchor).isActive = true

Прикрепите нижнюю часть нижней панели к нижней части

    
ответ дан Emmannuel Pregnolato 13.03.2018 в 01:44
источник
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
источник