Ответ 1
Вы уверены, что используете стиль UITableViewStyleGrouped
?
Потому что по умолчанию он установлен на UITableViewStylePlain
, который также показывает пустые ячейки после отображения заполненных ячеек.
У меня есть пара проблем с моим UITableView
.
Когда я добавляю UITableView
на мою страницу, по умолчанию он вызывает некоторое фиксированное количество строк,
даже если я установил количество строк в секции как 1
. Все строки отображаются, кроме первой строки, и все это пустые строки. Поэтому я хочу скрыть все пустые строки в UITableView
.
На основе непустых строк я хочу изменить высоту моего UITableView
.
Вы уверены, что используете стиль UITableViewStyleGrouped
?
Потому что по умолчанию он установлен на UITableViewStylePlain
, который также показывает пустые ячейки после отображения заполненных ячеек.
НОВЫЙ ОТВЕТ
В Swift 2.2, 3.0 и далее выполните следующие действия:
tableView.tableFooterView = UIView()
OLD ANSWER НИЖЕ. ЗАЩИТА ДЛЯ ПОЧТЫ.
Если вы должны использовать UITableViewStylePlain
, и вы не используете footerView для чего-либо еще, вы можете использовать следующее полузагрузочное решение, если у вас ARC включен.:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *view = [[UIView alloc] init];
return view;
}
Если у вас есть ARC отключено, используйте следующее:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
UIView *view = [[[UIView alloc] init] autorelease];
return view;
}
Это создает невидимый footerView, который появляется сразу после последней заполненной данными ячейки.
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.01f;
}
и для iOS 7
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Я решил проблему, создав простой UIView в виде нижнего колонтитула с тем же цветом фона, что и фон таблицы:
(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {
UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
view.backgroundColor = [UIColor whiteColor];
return view;
}
Возможно, вам придется дополнительно отключить прокрутку в представлении таблицы.
Если в вашем представлении таблицы есть несколько разделов, вы можете попробовать:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
if (section == tableView.numberOfSections - 1) {
return [UIView new];
}
return nil;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
if (section == tableView.numberOfSections - 1) {
return 1;
}
return 0;
}
- (void) viewDidLoad
{
[super viewDidLoad];
self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
}
Это также можно сделать через Interface Builder. Просто добавьте UIView в 1 пиксель в качестве нижнего колонтитула в UITableView. Это по существу то же самое, что и большинство ответов здесь, но он сохраняет некоторые особенности пользовательского интерфейса в представлении, а не в контроллере представления.
[self.SomeTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
Используйте это, чтобы избавиться от строк, если UITableView
пуст.
в методе, который возвращает количество строк, укажите динамически count
. Например, если вы собираетесь заполнить таблицу, скажем, NSArray
с именем arrayForRows:
return [arrayForRows count]; // inside the method which returns the number of rows.
Вышеприведенный пример - заполнение таблицы массивом в качестве источника данных. Пустых строк нет. Только в этом столбце отображается таблица, содержащаяся в таблице count
элементов массива, заполняющих таблицу.
Я думаю, вы имеете в виду высоту строки в таблице. Вы можете играть с высотой строк, используя метод:
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
EDIT: а теперь я получаю то, чего вы пытаетесь достичь. Вы пытаетесь не показывать пустые строки, разделенные этими разделителями? Посмотреть это сообщение:
Немного спрятано в ответе Борна; если вы хотите скрыть до нижних пустых строк в простом представлении таблицы с несколькими разделами, используйте этот ответ: