Как скрыть пустые строки в UITableView и изменить высоту Uitableview на основе непустых строк

У меня есть пара проблем с моим UITableView.

  • Когда я добавляю UITableView на мою страницу, по умолчанию он вызывает некоторое фиксированное количество строк, даже если я установил количество строк в секции как 1. Все строки отображаются, кроме первой строки, и все это пустые строки. Поэтому я хочу скрыть все пустые строки в UITableView.

  • На основе непустых строк я хочу изменить высоту моего UITableView.

Ответ 1

Вы уверены, что используете стиль UITableViewStyleGrouped?

Потому что по умолчанию он установлен на UITableViewStylePlain, который также показывает пустые ячейки после отображения заполненных ячеек.

Ответ 2

НОВЫЙ ОТВЕТ

В 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, который появляется сразу после последней заполненной данными ячейки.

Ответ 3

- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section 
 { 
     return 0.01f;
 }

и для iOS 7

 self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

Ответ 4

Я решил проблему, создав простой 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;
}

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

Ответ 5

Если в вашем представлении таблицы есть несколько разделов, вы можете попробовать:

- (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;
}

Ответ 6

- (void) viewDidLoad
{
  [super viewDidLoad];
  self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
}

Ответ 7

Это также можно сделать через Interface Builder. Просто добавьте UIView в 1 пиксель в качестве нижнего колонтитула в UITableView. Это по существу то же самое, что и большинство ответов здесь, но он сохраняет некоторые особенности пользовательского интерфейса в представлении, а не в контроллере представления.

enter image description here

Ответ 8

[self.SomeTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

Используйте это, чтобы избавиться от строк, если UITableView пуст.

Ответ 9

в методе, который возвращает количество строк, укажите динамически count. Например, если вы собираетесь заполнить таблицу, скажем, NSArray с именем arrayForRows:

return [arrayForRows count]; // inside the method which returns the number of rows.

Вышеприведенный пример - заполнение таблицы массивом в качестве источника данных. Пустых строк нет. Только в этом столбце отображается таблица, содержащаяся в таблице count элементов массива, заполняющих таблицу.

Я думаю, вы имеете в виду высоту строки в таблице. Вы можете играть с высотой строк, используя метод:

(CGFloat)tableView:(UITableView  *)tableView heightForRowAtIndexPath:(NSIndexPath  *)indexPath

прочитайте http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UITableViewDelegate/tableView:heightForRowAtIndexPath:

EDIT: а теперь я получаю то, чего вы пытаетесь достичь. Вы пытаетесь не показывать пустые строки, разделенные этими разделителями? Посмотреть это сообщение:

как отобразить таблицу с нулевыми строками в UITableView

Ответ 10

Немного спрятано в ответе Борна; если вы хотите скрыть до нижних пустых строк в простом представлении таблицы с несколькими разделами, используйте этот ответ:

fooobar.com/info/91117/...