Ответ 1
Попробуйте установить
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = NO;
self.automaticallyAdjustsScrollViewInsets = NO;
Внутри контроллера таблицы просмотра
Я обновляю свое приложение, чтобы использовать iOS 7, и у меня проблема с табличным представлением. Моя панель вкладок полупрозрачна. Проблема заключается в том, когда я просматриваю нижнюю часть таблицы, часть последней ячейки все еще находится за панелью вкладок. Я хотел бы иметь немного пространства между последней ячейкой и панелью вкладок. Я мог бы исправить это, используя вместо этого непрозрачную панель вкладок, но я хочу, чтобы она была полупрозрачной.
Попробуйте установить
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = NO;
self.automaticallyAdjustsScrollViewInsets = NO;
Внутри контроллера таблицы просмотра
Проверьте снимок экрана
Проверьте нижнюю панель и Un-checke под нижней панелью
Это то, что сработало для меня. В пользовательском 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;
}
SWIFT 3
поместите это внутри viewDidLoad
вашего tableViewController
:
self.edgesForExtendedLayout = UIRectEdge()
self.extendedLayoutIncludesOpaqueBars = false
self.automaticallyAdjustsScrollViewInsets = false
Swift 4.x
let adjustForTabbarInsets: UIEdgeInsets = UIEdgeInsetsMake(0, 0, self.tabBarController!.tabBar.frame.height, 0)
self.yourTableView.contentInset = adjustForTabbarInsets
self.yourTableView.scrollIndicatorInsets = adjustForTabbarInsets
Если какое-либо представление отображается за 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, чтобы исправить эту проблему), это было лучшее решение, которое я нашел.
Очень сложно решить проблему без подробной информации или фактических кодов. У меня есть аналогичная проблема с 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
}
Для тех, кто будет использовать решение @Spentak, этот код попадает в бесконечный цикл после iOS версии 11.x из-за этой следующей строки;
self.view.frame = CGRectMake (0, 0, viewBounds.width, viewBounds.height - bottomBarOffset)
эта строка вызывает снова и снова viewDidLayoutSubviews(). Будьте осторожны.
Вам нужно настроить высоту представления таблицы. Просто оставьте 49px внизу, так как высота табуляции составляет 49 px. Отрегулируйте высоту стола так, чтобы он оставил пространство размером 49 пикселей ниже.