it-roy-ru.com

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

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

Есть идеи, как удалить эти строки?

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

Image Link

83
Fahim Parkar

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

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 , он очень короткий и полезный тоже .. И вам также следует попробовать эту единственную строку,

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

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

88
iPatel

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

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

и Свифт:

tableFooterView = UIView()

146
T. Benjamin Larsen

Прозрачный 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];
7
Andrey Zverev

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

 tableView.tableFooterView = UIView()
7
seo
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
6
Robert Varga

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

 - (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];
}   
3
Pradhyuman sinh

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

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

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

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

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

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

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

1
Mak083

Некоторые из предыдущих предложений содержат БОЛЬШУЮ концептуальную ошибку:

если вы делаете:

[ячейка addSubview: ....

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

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

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

б) создать собственный вид и ДОБАВИТЬ свой пользовательский разделитель в "init" "awakeFromNib" пользовательской ячейки.

код для а):

 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)
        }
0
ingconti

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

0
Matoz

Внутри ячейкиForRowAtIndexPath

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

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

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

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

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

0
nickdnk

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

Работал на Xcode 7.2

0
Vladimir Romanov

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

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