IOS 7 UITableView: как удалить пространство между навигационной панелью и первой ячейкой

моя проблема: с iOS 7 в сгруппированном UITableView есть пробел от вершины таблицы и первой ячейки.

Странно, что когда я загружаю контент в первый раз, таблица выглядит нормально, как на первом изображении, но когда я прокручиваю вниз, между верхней и первой ячейками появляется пробел, как во втором:

enter image description hereenter image description here

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

Есть идеи о?

Ответ 1

Просто добавьте это в метод ViewDidLoad

self.automaticallyAdjustsScrollViewInsets = NO;

Ответ 2

Ответ был очень забавным для меня и моей команды, а работал как шарм

  • В построителе интерфейсов просто переместите табличное представление под другое представление в иерархии представлений.

ПРИЧИНА:

Мы заметили, что это происходит только для первого представления в иерархии представления, если это первое представление является UITableView. Таким образом, у всех других подобных UITableViews нет этого раздражающего раздела, кроме первого. Мы пробовали перемещать UITableView с первого места в иерархии представлений, и все работало, как ожидалось.

Ответ 3

он разрешает мою аналогичную проблему:

if ([[UIDevice currentDevice].systemVersion floatValue] >= 7){
tableView.contentInset = UIEdgeInsetsMake(-20, 0, 0, 0);
}

Ответ 4

Перейдите к инспектору атрибутов контроллера просмотра, выбрав xib или контроллер в Storyboard. Снимите флажок Настроить прокрутки в в Макет. Это решит проблему enter image description here

Ответ 5

Если вы используете UITableView с сгруппированным стилем и только 1 группу, используйте простой стиль, вместо этого решите свою проблему.

UITableViewController *tableViewController;
tableViewController = [[UITableViewController alloc] initWithStyle:UITableViewStylePlain];

Ответ 6

Простейшим решением этой проблемы в сгруппированном типе tableView является:

tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.tableView.bounds.size.width, 0.01f)];

Ответ 7

ребята! У меня такая же проблема. TableView появился со свободным пространством между навигационной панелью и первой ячейкой. Этот код спас меня:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    if (section == 0) {
        return 10;
    }
    else return 2;
}

Ответ 8

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

Это удалило пространство сверху:

self.automaticallyAdjustsScrollViewInsets = NO;

и это удалило пробелы под ячейками: Установка атрибута "Стиль" в UITableView на "Обычный"

Ответ 9

Я работаю с Xcode 7.3.1, iOS9 и swift 2. Я хотел бы поделиться тем, что сработало для меня:

Просто добавьте это в ваш метод ViewDidLoad

self.automaticallyAdjustsScrollViewInsets = false;

Ответ 10

Начиная с iOS 7, вы автоматически получаете заголовок группы и некоторое пространство. Сравните приложение с приложением "Настройки", и вы увидите. Вы можете обойти это, указав UITableView, чтобы установить высоту заголовка как можно меньше. См. Как скрыть заголовок первой группы.

Ответ 11

Я понимаю, что на это был дан ответ давным-давно, но для кого-то, кто сталкивается с аналогичной ситуацией, я расскажу, что в итоге работает для меня:

Если вы используете xib, выберите представление верхнего уровня и установите "Строка состояния" на "Нет" в области "Имитированные показатели" в Инспекторе атрибутов. Исправлена ​​проблема с расстоянием.

Ответ 12

Для меня это не сработало

self.automaticallyAdjustsScrollViewInsets = NO;

Это привело к тому, что табличный вид находился под навигационной панелью.

Что сработало для меня, это войти в мою раскадровку и изменить размер моего стола. Кажется, у моего tableView был разрыв в 20 пикселей в верхней части, чтобы позволить statusBar. Я масштабировал его, и все прекрасно выстроилось.

Ответ 13

Я видел это дополнительное пространство в верхней части одного из моих табличных представлений в очень странной ситуации.

После того, как я добавил UIScrollView в качестве корневого представления моего первого контроллера в моем стеке навигации, если я представил следующий контроллер как Show Detail segue, мой следующий контроллер имел бы пространство над его табличным представлением.

Решение для меня состояло в том, чтобы изменить segue на Present Modally, и все вернулось к нормальному.

Самая странная часть изменения segue заключалась в том, что до того, как я добавил, что корневое представление было UIScrollView, мой Show Detail segue представлял следующий контроллер по модулю. Однако после того, как я добавил root UIScrollView, Show Detail segue нажимал на следующий контроллер (чего я не хотел).

Ответ 14

Для решения этой проблемы убедитесь, что вы не отметили это поле в ViewController:

В ViewController → Attibutes Inspector → Layout (unchecked - Настроить прокручиваемые вставки)

Пример изображения

если этого недостаточно, попробуйте это в TableView, установите Style в Обычная:

Пример изображения

Это решит вашу проблему.

Ответ 15

Имел подобную проблему, даже если установить autoAdjustsScrollViewInsets на NO. Это решило для меня:

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
{
    return CGFLOAT_MIN;
}

Ответ 16

В UIViewController.h SDK iOS9 есть способ:

@property(nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES

не является свойством, поэтому

self.automaticallyAdjustsScrollViewInsets = NO; 

должен быть

-(BOOL)automaticallyAdjustsScrollViewInsets{   
     return NO;
}