Скрыть удаление разделительной строки, если UITableViewCells пуст

У меня есть UITableView, и у меня есть только 3 строки, и я могу видеть эти 3 строки. Проблема в том, что ячеек пуст: я вижу строки там. Я не хочу видеть эти строки.

Любая идея, как удалить эти строки?

Ниже приведено изображение для того, что я ищу.

Image Link

Ответ 1

Вы можете скрыть стандартную разделительную строку UITableView, используя любой из приведенных ниже фрагментов кода. Самый простой способ добавить пользовательский разделитель - добавить простой UIView из 1px height:

UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor clearColor]; // set color as you want.
[cell.contentView addSubview:separatorLineView];

ИЛИ

    self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
    self.tblView.delegate=self;
    self.tblView.dataSource=self;
    [self.view addSubview:self.tblView];

    UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
    v.backgroundColor = [UIColor clearColor];
    [self.tblView setTableHeaderView:v];
    [self.tblView setTableFooterView:v];
    [v release];

ИЛИ

- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
    // This will create a "invisible" footer
    return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    // To "clear" the footer view
    return [[UIView new] autorelease];
}

ИЛИ

А также проверьте nickfalk answer, это очень коротко и полезно. И вы также должны попробовать эту единственную строку,

self.tableView.tableFooterView = [[UIView alloc] init];

Не уверен, но он работает во всех версиях iOS, которые я проверил, с iOS 5 и более поздними версиями, вплоть до iOS 7.

Ответ 2

Даже проще, чем Андрей З ответить: Просто создайте поддельный tableFooterView в вашем классе UITableView:

self.tableFooterView = [UIView new]; // to hide empty cells

и Swift:

tableFooterView = UIView()

Ответ 3

Прозрачный UIView как нижний колонтитул tableView с высотой 1px сделает трюк.

UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 1)];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];

Ответ 4

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

Ответ 5

Обновлен ответ для swift и iOS 9. Это работает для табличных представлений сорта .Plain.

 tableView.tableFooterView = UIView()

Ответ 6

Используйте этот код для удаления разделительной строки для пустых ячеек.

 - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
     return [UIView new];

    // If you are not using ARC:
    // return [[UIView new] autorelease];
}   

Ответ 7

Пожалуйста, попробуйте следующий код:

self.tblView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
if ([self.tblView respondsToSelector:@selector(setSeparatorInset:)])
{
    [self.tblView setSeparatorInset:UIEdgeInsetsZero];
}
// write in view did load

Ответ 8

Просто вернул пустой UIView() в viewForFooterInSection для меня:

override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
        return UIView()
    }

Ответ 9

Вы можете использовать

tableForBrands.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

Это сработало для меня...

Ответ 10

Ни один из предложенных ответов не подходит для моей аналогичной проблемы. Реализация этого метода в делегате tableView наконец-то сработала:

- (void)tableView:(UITableView *)tableView
  willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}

Ответ 11

Если вы используете Storiesboards, вы можете просто перетащить UIView в свой UITableView под вашими ячейками и установить его высоту в 0. (Проверялись только в проекте iOS 8)

Ответ 12

Я думаю, это то, что вы ищете.

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

Ответ 13

Вы можете настроить представление таблицы для группировки вместо простого - это немного изменяет внешний вид, но по крайней мере удаляет лишние строки.

У меня была эта точная проблема, и я перешел на сгруппированные представления. Выглядит намного лучше.

Ответ 14

Некоторые из предыдущих предложений содержат концептуальную ошибку BIG:

если вы выполните:

[cell addSubview:....

четное время, когда ячейка "повторно используется", вы добавите новое представление для разделителя!

избегайте его двумя способами:

a) использовать TAG и:  1) попросите подзаголовок для этого тега     let divider = cell.viewWithTag(TAG)...  2) если присутствует, НЕ добавляйте другое подвью  3) если НЕ присутствует, добавьте И помечайте его.

b) создать пользовательский вид и добавить свой пользовательский разделитель в "init" "awakeFromNib" пользовательской ячейки.

для a):

 if let divider = cell.viewWithTag(DIVIDER_TAG) as? UIView{
            // nothing.. eventually change color bases in IndexPath...
        }else{
            let frame = CGRectMake(0, cell.frame.height-1, cell.frame.width, 1)
            divider.tag = DIVIDER_TAG
            divider.backgroundColor = UIColor.redColor()
            cell.addSubview(divider)
        }

Ответ 15

Внутри cellForRowAtIndexPath

let separatorLineView:UIView = UIView(frame: CGRectMake(0,0,self.tableview.bounds.width,0.5))
separatorLineView.backgroundColor = tableView.separatorColor
cell!.contentView.addSubview(separatorLineView)

Ответ 16

Быстрое решение: tableView.tableFooterView = UIView (frame: CGRectZero)

Работает на Xcode 7.2

Ответ 17

Добавьте следующую строку в метод UITableViewDataSource numberOfRowsInSection:.

tableView.separatorColor = [UIColor clearColor];