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, отсекающей дно..