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

Пользовательский TableView iOS 7 находится под TabBar

Я пытаюсь подключить мое приложение к iOS7, но мой пользовательский TableViewController показывает последнюю строку (ячейку) под TabBar: (

Я много искал для него, но я не нашел никакого решения. Кто-нибудь может мне помочь?

Мой пользовательский класс просмотра таблиц

Ошибка показана на снимке экрана (отображается только часть последнего продукта, потому что im draving вверх, чтобы показать скрытый продукт под вкладкой):

screenshot

Спасибо.

4b9b3361

Ответ 1

Я нашел ответ на ваш вопрос в другом посте, на который ответил dariaa, здесь:

Панель вкладок покрывает ячейки TableView в iOS7

Это отлично сработало для меня.

Пожалуйста, не надо отдавать мне должное, потому что я не тот парень, который решил это.

В вашем пользовательском TableViewController добавьте эти две строки в [super viewDidLoad]:

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.edgesForExtendedLayout = UIRectEdgeAll;
    self.tableView.contentInset = UIEdgeInsetsMake(0., 0., CGRectGetHeight(self.tabBarController.tabBar.frame), 0); 
} 

Ответ 2

У меня такая же проблема, и я решил ее использовать с помощью раскадровки. В контроллере панели вкладок перейдите к инспектору атрибутов, "Имитированные показатели" и установите нижнюю панель в панель непрозрачных вкладок. Это! См. Рисунок ниже для описания. enter image description here

Saudações! (Привет!)

Ответ 3

2 строки в viewDidLoad и что это!

self.edgesForExtendedLayout = UIRectEdgeAll;
self.tableview.contentInset = UIEdgeInsetsMake(0.0f, 0.0f, CGRectGetHeight(self.tabBarController.tabBar.frame), 0.0f);

Ответ 4

Мои друзья, я не могу сказать, как сильно я боролся с этим. Ни одна переконфигурация Story Board мне никогда не помогала. Проблема была в точности как в оригинальной почте, мне удалось ее исправить, используя:

для быстрого 3

self.edgesForExtendedLayout = []

для objective-c

self.edgesForExtendedLayout = NO;

Ответ 5

В iOS 7 viewController использует полную высоту. Существует свойство, представленное как

self.automaticallyAdjustsScrollViewInsets = NO;

установите значение no. затем проверьте или установите UIEdgeInset, если он не установлен сразу после него.

UIEdgeInsetsMake(top, left, bottom, right)

См. здесь https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html

Изменить: попробуйте также

self.edgesForExtendedLayout = UIRectEdgeNone;

Ответ 6

Основная причина этой проблемы заключается в том, что automaticallyAdjustsScrollViewInsets эффективен только в первом прокрутке в вашей иерархии просмотров VC. Это не документировано Apple, но это единственный способ, которым VC будет определять вид прокрутки, который необходимо изменить, если вы не используете UITableViewController.

Итак, чтобы исправить вашу проблему без ручной настройки вставки, сделайте следующее:

  • Убедитесь, что установлен флажок "Настроить прокрутки".
  • Убедитесь, что tableView является подвью первым в иерархии представлений. (Переместите его вверх над всеми другими элементами)

Ответ 7

UIViewController имеет два новых свойства, которые помогут вам: topLayoutGuide и bottomLayoutGuide. Они возвращают высоту элементов управления родительским представлением, которых необходимо избегать. В этом случае bottomLayoutGuide вернет смещение панели вкладок.

Ваш настраиваемый контроллер представлений, вероятно, переопределяет метод и не вызывает реализацию super, где это будет сделано для вас. Я предполагаю, что вы устанавливаете ограничения AutoLayout или вручную устанавливаете рамку представления, чтобы заполнить представление. Вам просто нужно включить значение из [bottomLayoutGuide length] в расчет раскладки. Если вы поддерживаете ротацию, вы должны обновить это значение в willAnimateRotationToInterfaceOrientation:duration:.

Ответ 8

UINavigationController и UITabBarController оба имеют флаг прозрачности, который может быть установлен программно или в раскадровке.

В UINavigationController также есть два флага, которые управляют, если контент распространяется под верхней или нижней панелью. Снова вы можете установить их программно или в раскадровку. Это применимо ко всем областям.

Каждый UIViewController может устанавливать свои собственные предпочтения в коде. Свойство называется edgesForExtendedLayout, и вы можете настроить все комбинации.

Использование этих свойств позволит AutoLayout и Springs'n'Struts настраивать представления так, как вы хотите, независимо от устройства.

В UIViewController есть много новых свойств, которые вы хотите посмотреть.

Ответ 9

Попробуйте следующее:

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])

 self.edgesForExtendedLayout = UIRectEdgeBottom;

Ответ 10

У меня такая же проблема. Одно из решений - сделать ToolBar не прозрачным. Вот как это сделать:

  • Сначала выберите панель инструментов из средства просмотра документов как здесь
  • Затем снимите флажок Прозрачный как здесь

Надеюсь, что это поможет.

Спасибо.

Ответ 11

Проблема была замаскирована с помощью:

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 112, 0);
}

Но это не решает, потому что на каждом iPhone и в каждом приложении tableview у меня есть другое пространство внизу.

Итак, это плохое решение.

Я не знаю, как это решить.

Ответ 12

Я решил проблему сейчас, изменив свой BaseTableViewController на наследование с UIViewController на UITableViewController.

Но использование TableView внутри UIViewController не разрешено: (

Спасибо.

Ответ 13

Возможно, это не правильный ответ, и по этой причине я отправляю этот ответ, чтобы вы могли сказать мне, может ли этот ответ быть возможным решением.

В моем случае мне нравится полупрозрачный эффект, поэтому я добавил нижний колонтитул в таблицу, и я изменил scrollIndicators.

- (void)viewDidLoad
{
    // Do any additional setup after loading the view.
    [super viewDidLoad];
    UIView *footer = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.agendaItemsTable.frame.size.width, self.tabBarController.tabBar.frame.size.height)];
    self.agendaItemsTable.tableFooterView = footer;
    self.agendaItemsTable.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, self.tabBarController.tabBar.frame.size.height, 0);

}

Как вы думаете?

Ответ 14

У меня была та же проблема, и ответы на голосование не разрешили. См. мой ответ по аналогичному вопросу, Панель вкладок охватывает ячейки TableView в iOS7.

Я решил проблему, вручную установив рамку представления таблицы в методе контроллера табличного представления viewWillAppear: на высоту экрана - (высота строки состояния + высота панели навигации + высота строки вкладок).

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    // Adjust height of tableview (does not resize correctly in iOS 7)
    CGRect tableViewFrame = self.tableView.frame;
    tableViewFrame.size.height = [self heightForTableView];
    self.tableView.frame = tableViewFrame;
}

- (CGFloat)heightForTableView
{
    return CGRectGetHeight([[UIScreen mainScreen] bounds]) -
           (CGRectGetHeight([[UIApplication sharedApplication] statusBarFrame]) +
            CGRectGetHeight(self.navigationController.navigationBar.frame) +
            CGRectGetHeight(self.tabBarController.tabBar.frame));
}

Если кто-то найдет лучшее решение этой проблемы, пожалуйста, поделитесь!

Ответ 15

Для тех, кто xarly, кто хочет полупрозрачный эффект, а для решения Autolayout (без установки фреймов) см. мой ответ здесь fooobar.com/questions/187985/...

Ответ 16

У меня была похожая проблема с представлением коллекции. Изменение рамки просмотра коллекции и вставки содержимого ниже исправило это для меня...

    guard let cv = collectionView,
        let tabBar = tabBarController?.tabBar else { return }

    // Resize collection view for tab bar
    let adjustedFrame = CGRect(origin: cv.frame.origin,
                               size: CGSize(width: cv.frame.width, height: cv.frame.height - tabBar.frame.height))
    cv.frame = adjustedFrame

    // Adjust content inset for tab bar
    let adjustedContentInsets = UIEdgeInsetsMake(0, 0, tabBar.frame.height, 0)
    cv.contentInset = adjustedContentInsets
    cv.scrollIndicatorInsets = adjustedContentInsets

Удачи!