Ответ 1
Вы можете достичь того, чего хотите, указав нижний колонтитул для таблицы. См. Этот ответ для получения дополнительной информации: Устранить дополнительные разделители ниже UITableView
При использовании простого стиля UITableView
с достаточно большим количеством ячеек, который UITableView
не может отобразить их все без прокрутки, в пустое пространство под ячейками не появляются разделители. Если у меня есть только несколько ячеек, пустое пространство под ними включает разделители.
Есть ли способ, которым я могу заставить UITableView
удалить разделители в пустом пространстве? Если нет, мне придется загрузить пользовательский фон с разделителем, нарисованным для каждой ячейки, что затруднит наследование поведения.
Я нашел несколько аналогичный вопрос здесь, но я не могу использовать сгруппированный UITableView
в моей реализации.
Вы можете достичь того, чего хотите, указав нижний колонтитул для таблицы. См. Этот ответ для получения дополнительной информации: Устранить дополнительные разделители ниже UITableView
Самый простой способ - установить свойство 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];
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView() // it just 1 line, awesome!
}
Используя ссылку от Daniel, я сделал расширение, чтобы сделать его более удобным:
//UITableViewController+Ext.m
- (void)hideEmptySeparators
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
v.backgroundColor = [UIColor clearColor];
[self.tableView setTableFooterView:v];
[v release];
}
После некоторых тестов я узнал, что размер может быть 0, и он также работает. Поэтому в конце таблицы не добавляется какой-либо запас. Так что спасибо wkw за этот хак. Я решил опубликовать это здесь, так как мне не нравится перенаправление.
Swift Версия
Самый простой способ - установить свойство tableFooterView:
override func viewDidLoad() {
super.viewDidLoad()
// This will remove extra separators from tableview
self.tableView.tableFooterView = UIView(frame: CGRectZero)
}
Если вы используете iOS 7 SDK, это очень просто.
Просто добавьте эту строку в свой метод viewDidLoad:
self.yourTableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Установка таблицы separatorStyle
в UITableViewCellSeparatorStyleNone
(в коде или в IB) должна сделать трюк.
Для Swift:
self.tableView.tableFooterView = UIView(frame: CGRectZero)
Я использую следующее:
UIView *view = [[UIView alloc] init];
myTableView.tableFooterView = view;
[view release];
Выполнение этого в viewDidLoad. Но вы можете установить его в любом месте.
Для этой проблемы мне очень понравилось следующее:
- (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 - количество строк, которые я имел в таблице.
Надеюсь, что это поможет,
Брентон.