Как ограничить количество ячеек, отображаемых UITableView?

#iphone #uitableview

#iPhone #uitableview

Вопрос:

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

 -(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   return 5;
}
  

но в нижней части табличного представления находятся пустые ячейки, которые не нужны. Если я установлю для стиля tableview значение grouped, я получу 5 ячеек и ни одной пустой под ними. Я видел, что другие люди делали это, но, похоже, не могут с этим справиться. Мне было интересно, добавили ли они каким-то образом пользовательский вид в нижний колонтитул таблицы, чтобы исключить пустые ячейки?

Любые идеи или помощь приветствуются.

Комментарии:

1. Неясно, хотите ли вы избежать использования сгруппированного стиля или у вас проблемы с его использованием?

2. У меня нет никаких проблем с реализацией любой из группировок в стандартном UITableView. Я пытаюсь сказать, что если я использую grouped и устанавливаю количество строк в разделе равным 5, то при запуске приложения я вижу 5 строк и все, всего 5 строк. Если, с другой стороны, я использую стандартное табличное представление и устанавливаю количество строк равным 5 строкам, я вижу, что получаю свои 5 строк, но затем под ними находится дополнительное количество пустых строк, которые не имеют содержимого и не нужны, но помещены туда просто для заполнения экрана.

Ответ №1:

Если вы хотите сохранить разделитель, вы могли бы вставить фиктивный вид нижнего колонтитула. Это ограничит просмотр таблицы отображением только количества ячеек, которые вы вернули в TableView:numberOfRowsInSection:

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

В swift:

 self.tableView.tableFooterView = UIView(frame: CGRectZero)
  

Комментарии:

1. Отличная идея. Просто убедитесь, что для этого табличного представления не установлена фиксированная высота, иначе дополнительный вид нижнего колонтитула может подтолкнуть все дальше под табличный вид (даже если это просто фиктивный вид).

2. В Swift 3: self.TableView.tableFooterView = UIView(фрейм: CGRect.zero)

Ответ №2:

Гораздо более приятный метод, который не требует изменения размера ячейки, — отключить разделитель по умолчанию (установить стиль на none), а затем поместить разделительную строку в саму ячейку.

Комментарии:

1. Итак, для этого потребуется создать пользовательскую ячейку в IB или мне придется программно добавить разделитель в ячейку?

2. Вы могли бы сделать либо то, либо другое. Обычно я создаю подкласс UITableViewCell, но вы можете добавить вложенный просмотр в contentview обычной UITableViewCell. IB или code зависит исключительно от того, как вы предпочитаете работать…

Ответ №3:

У меня была похожая проблема, как показывать только разделители для ячеек, содержащих данные.

Что я сделал, так это следующее:

  1. Отключите разделители для всего TableView. Вы можете сделать это в инспекторе для tableview в Interface Builder или позвонив [yourTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone]; .

  2. Внутри вашего, cellForRowAtIndexPath где вы заполняете свой tableview ячейками, создайте новый UIView и установите его в качестве вложенного представления в ячейку. Сделайте фон этого вида светло-серым и слегка прозрачным. Вы можете сделать это с помощью следующего:

     UIView *separatorView = [[UIView alloc] initWithFrame:CGRectMake:
                                            (0, cell.frame.size.height-1, 
                                               cell.frame.size.width, 1)];
    [separatorView setBackgroundColor:[UIColor lightGrayColor]];
    [separatorView setAlpha:0.8f];
    [cell addSubView:separatorView];
      

    Ширина этого представления составляет 1 пиксель, что совпадает с разделителем по умолчанию, он соответствует длине ячейки внизу.

Поскольку cellForRowAtIndexPath вызывается только так часто, как вы указали в numberOfRowsInSection , эти вложенные представления будут созданы только для ячеек, которые содержат данные и должны иметь разделитель.

Надеюсь, это поможет.

Ответ №4:

У меня это сработало — у меня были дополнительные пустые строки внизу экрана на iphone 5 —

В моем случае мне понадобилось 9 строк

 - (CGFloat)tableView:(UITableView *)tabelView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{        
    return self.tableView.frame.size.height / 9;
}
  

Ответ №5:

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

Ответ №6:

У вас всегда будет 5 строк? Если это динамическая ситуация, вы должны установить количество строк в соответствии с источником данных tableview. Например:

 return [postListData count];
  

Это возвращает количество записей в массиве, содержащем содержимое.

Tableview будет отображать только то количество строк и разделов, которое вы ему укажете. Если вы всегда собираетесь использовать только один раздел, НЕ применяйте описанный ниже метод.

     - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 2;
}
  

Без этого в tableview будет только 1 раздел. С его помощью, как вы могли бы себе представить, вы можете указать количество разделов.

Ответ №7:

Это довольно просто. Просто установите размер всплывающего окна следующим образом: self.optionPickerPopOver.popoverContentSize = CGSizeMake(200, 200); Конечно, вы можете настроить размер (200,200) в зависимости от размера содержимого и количества строк.

Ответ №8:

Простым способом было бы уменьшить размер TableView. Т.е. 5 ячеек по 20 точек каждая дают 100,0f, установка высоты на 100,0f приведет к тому, что будут видны только 5 строк. Другим способом было бы вернуть больше строк, но строки 6,7 и так были бы некоторыми представлениями с альфа 0, но это кажется громоздким. Вы пытались вернуть какой-либо цветной вид в качестве нижнего колонтитула?

Ответ №9:

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

Ответ №10:

Попробуйте что-то вроде этого:

[table setFrame:CGRectMake(x, y, width, height*[list count])];

высота относится к высоте ячейки

Ответ №11:

Как сказал Nyx0uf, ограничение размера ячейки может этого достичь. Например:

 - (CGFloat)tableView:(UITableView *)tabelView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat resu<

    result = 100;

    return resu<
}
  

Ответ №12:

реализуйте эти два метода в вашем UITableViewController:

 - (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    if (section == tableView.numberOfSections - 1) {
        return [[UIView alloc] initWithFrame:CGRectMake(0, 0, 1, 1)];
    }
    return nil;
}


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    if (section == tableView.numberOfSections - 1) {
        return 1;
    }
    return 0;
}
  

Фактически, эти коды сообщают tableview, что вам больше не нужно отображать разделяющую строку для меня, так что, похоже, пустые ячейки отображаться не будут (на самом деле, пустую ячейку тоже нельзя выделить)