Скрыть удаление разделительной строки, если 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];