Скрыть удалить разделительную строку, если UITableViewCells пусты [дубликат]



этот вопрос уже есть ответ здесь:




  • Исключите дополнительные разделители под UITableView

    31 ответы



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



любая идея, как удалить эти линии?



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



Image Link

524   17  

17 ответов:

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

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

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

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

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

и Swift:

tableFooterView = UIView()

прозрачный 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];
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

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

 tableView.tableFooterView = UIView()

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

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

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

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

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

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

можно использовать

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

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

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

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

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

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

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

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

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

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

Если вы:

[cell addSubview: ....

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

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

a) используйте тег, а: 1) попросите подвида для этого тега пусть делитель = ячейка.viewWithTag(тег) ... 2) если присутствует, не добавляйте другой подвида 3)если нет добавить и пометить его.

b) создать пользовательский вид и добавьте свой пользовательский разделитель в "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)
        }

Быстрое Решение: tableView.tableFooterView = UIView (кадр: CGRectZero)

работал на Xcode 7.2

внутри cellForRowAtIndexPath

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

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

tableView.separatorColor = [UIColor clearColor];

Comments

    Ничего не найдено.