UITableViewController последняя строка отключена

Я испытываю проблему, когда в моем UITableViewController последняя строка всегда обрезается наполовину.

Если у меня 20 рядов, 20-й будет отрезан; если у меня 30, 30-е будет отрезано.

Я попытался изменить размер contentSize и фрейма UITableViewController, но он не работает.

Есть ли способ изменить размер UITableViewController до правильного размера?

Заранее спасибо.

Какой-то код:

Инициализируйте это в другом классе:

 settingsTable = [[SettingTableViewController alloc] init];
    settingsTable.view.frame = CGRectMake(0, 0, 320, 480);
    [self.view addSubview:settingsTable.view];

в UITableViewController:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return [settingsData count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
return [[settingsData objectForKey:[NSString stringWithFormat:@"%d", section]] objectAtIndex:0];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [[[settingsData objectForKey:[NSString stringWithFormat:@"%d", section]] objectAtIndex:1] intValue];
}

Я нигде не изменял размеры фрейма в UITableViewController

6 ответов

Решение

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

Изменить это:

До

К этому:

После

Или сделать это программно:

settingsTable.autoresizingMask &= ~UIViewAutoresizingFlexibleBottomMargin;

Изменить (из комментариев):

Ваша строка состояния установлена ​​на показ или скрыта? Если он отображается, измените строку кадра на:

settingsTable.view.frame = CGRectMake(0, 0, 320, 460);

Или попробуйте любой из них и посмотрите, помогут ли они:

settingsTable.view.frame = self.view.bounds;
// or
settingsTable.view.frame = self.view.frame;

При использовании UITableViewController внутри контейнерных контроллеров и полупрозрачных UI-баров), так что я думаю, что это "сторона приложения" для правильной обработки его contentInset.

Ты можешь попробовать

self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 44, 0);

Проблема в этой строке:

settingsTable.view.frame = CGRectMake(0, 0, 320, 480);

Вы не учитываете высоту строки состояния (20 пикселей в портретной ориентации). Общая доступная высота на самом деле 460px, а не 480px. Вот почему вы теряете 20px внизу. Вы должны вычислять кадры для размещения подпредставлений на основе границ родительского представления, а не жестко их кодировать:

settingsTable.view.frame = self.view.bounds;

Вы можете использовать следующий код

// Проверка ориентации устройства - (пусто)))
    {
        NSLog(@"Пейзаж");
        // установка высоты просмотра таблицы (высота просмотра таблицы - высота панели навигации)
        self.messageTableView.contentInset = UIEdgeInsetsMake(0, 0, self.view.frame.size.height-64, 0);
    }
    else
    {
        NSLog(@"Portrait");
        self.messageTableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0);
    }
} 

При работе с Auto-Layout убедитесь, что нижнее ограничение вашего tableView установлено равным 0 относительно его контейнера.

для установки через код (PureLayout)

[tableView autoPinEdge:ALEdgeBottom toEdge:ALEdgeBottom ofView:containerView withOffset:0];

У меня была похожая проблема в iOS 8

Просто настраивая высоту нижнего колонтитула раздела в моем tableView решил проблему.

Могут быть ваши ограничения, у меня просто была эта проблема, пока я не обнаружил, что мое табличное представление было ограничено высотой и шириной суперпредставления, но случайно было отцентрировано в безопасной области x & y, отсекающей дно..

Другие вопросы по тегам