it-swarm.com.ru

Могу ли я заставить UITableView скрыть разделитель между пустыми ячейками?

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

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

Я нашел несколько похожий вопрос здесь , но я не могу использовать сгруппированный UITableView в моей реализации.

207
jessecurry

Вы можете достичь того, что хотите, определив нижний колонтитул для таблицы. Смотрите этот ответ для более подробной информации: Устранить лишние разделители ниже UITableView

117
Daniel Hepper

Для iOS 7. * и iOS 6.1

Самый простой способ - установить свойство tableFooterView:

- (void)viewDidLoad 
{
    [super viewDidLoad];

    // This will remove extra separators from tableview
    self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
}

Для предыдущих версий

Вы можете добавить это к вашему TableViewController (это будет работать для любого количества разделов):

- (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];
}
216
J. Costa

Для Свифта:

override func viewDidLoad() {
    super.viewDidLoad()
    tableView.tableFooterView = UIView()  // it's just 1 line, awesome!
}
123
Sebastian

Используя ссылку от Даниэля, я сделал расширение, чтобы сделать его более удобным:

//UITableViewController+Ext.m
- (void)hideEmptySeparators
{
    UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
    v.backgroundColor = [UIColor clearColor];
    [self.tableView setTableFooterView:v];
    [v release];
}

После некоторых тестов я обнаружил, что размер может быть 0, и он работает также. Так что это не добавляет какой-то маржи в конце таблицы. Так что спасибо WKW за этот взлом. Я решил опубликовать это здесь, так как я не люблю перенаправление.

67
Sauleil

Swift Версия

Самый простой способ - установить свойство tableFooterView:

override func viewDidLoad() {
    super.viewDidLoad()
    // This will remove extra separators from tableview
    self.tableView.tableFooterView = UIView(frame: CGRectZero)
}
24
King-Wizard

Для Свифта:

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

Если вы используете iOS 7 SDK, это очень просто.

Просто добавьте эту строку в ваш метод viewDidLoad:

self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
8
Salmo

Установка separatorStyle в UITableViewCellSeparatorStyleNone (в коде или в IB) должна помочь.

7
duncanwilcox

Я использую следующее:

UIView *view = [[UIView alloc] init];
myTableView.tableFooterView = view;
[view release];

Делаем это в viewDidLoad. Но вы можете установить его где угодно.

5
Dare2Dream

Следующее очень хорошо сработало для меня для этой проблемы:

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section {

CGRect frame = [self.view frame];
frame.size.height =  frame.size.height - (kTableRowHeight * numberOfRowsInTable);

UIView *footerView = [[UIView alloc] initWithFrame:frame];
return footerView; }

Где kTableRowHeight - высота ячеек моей строки, а numberOfRowsInTable - количество строк в моей таблице.

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

Брентон.

0
Callaghan001