как скрыть пустые строки в UITableView и изменить высоту Uitableview на основе непустых строк
у меня есть пара проблем с моим UITableView.
когда я добавить
UITableviewна моей странице, по умолчанию он вызывает некоторое фиксированное количество строк, даже если я установил количество строк в разделе как1. Все строки отображаются, кроме первой строки,и все пустые строки. Итак, я хочу скрыть все пустые строки вUItableview.на основе непустых строк, я хочу изменить высоту моего
UItableView.
11 ответов:
Вы уверены, что вы используете
UITableViewStyleGroupedстиль?потому что по умолчанию он имеет значение
UITableViewStylePlainкоторый показывает пустые ячейки тоже после отображения заполненных ячеек.
ОТВЕТ
в Swift 2.2, 3.0 и выше, сделайте следующее:
tableView.tableFooterView = UIView()СТАРЫЙ ОТВЕТ НИЖЕ. ХРАНИТСЯ ДЛЯ ПОТОМКОВ.
если вы должны использовать
UITableViewStylePlain, и вы не используете нижний колонтитул для чего-либо еще, вы можете использовать следующее полу-грязное решение, если у вас есть ARC включено.:- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { UIView *view = [[UIView alloc] init]; return view; }если у вас есть дуга отключен используйте следующее:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { UIView *view = [[[UIView alloc] init] autorelease]; return view; }это создает невидимый нижний колонтитул, который появляется сразу после последней заполненной данными ячейки.
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { return 0.01f; }и для iOS 7
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Я решил проблему, создав простой UIView как вид нижнего колонтитула с тем же цветом фона, что и фон таблицы:
(UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease]; view.backgroundColor = [UIColor whiteColor]; return view; }Возможно, вам придется отключить прокрутку в представлении таблицы в дополнение.
Если ваш tableview имеет несколько разделов, вы можете попробовать использовать это:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { if (section == tableView.numberOfSections - 1) { return [UIView new]; } return nil; } - (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section { if (section == tableView.numberOfSections - 1) { return 1; } return 0; }
- (void) viewDidLoad { [super viewDidLoad]; self.tableView.tableFooterView = [[[UIView alloc] init] autorelease]; }
Это также можно сделать через Interface Builder. Просто добавьте UIView высотой 1 пиксель в качестве нижнего колонтитула в UITableView. Это по существу то же самое, что и большинство ответов здесь, но он сохраняет некоторые особенности пользовательского интерфейса в представлении, а не в контроллере представления.
[self.SomeTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];используйте это, чтобы избавиться от строк, если
UITableViewпусто.
в методе, который возвращает количество строк, укажите
countдинамически себя. Например, если вы собираетесь заполнить таблицу, скажем aNSArrayимениarrayForRows:return [arrayForRows count]; // inside the method which returns the number of rows.выше приведен простой пример заполнения таблицы массивом в качестве источника данных. Нет пустых строк. Только то, что многие строки отображаются в таблице в соответствии с
countэлементов в массиве заполнить таблицу.Я думаю, что вы имеете в виду высоту строки в таблице. Вы можно поиграть с высотой строк с помощью метода:
(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPathEDIT: ах теперь я получаю то, что вы пытаетесь достичь. Вы пытаетесь избежать отображения пустых строк, разделенных этими разделительными линиями правильно? Видеть это сообщение:
немного скрыто в ответе Борна; если вы хотите скрыть нижние пустые строки в простом tableview с несколькими разделами, используйте этот ответ:
Для Swift:
override func viewWillAppear(animated: Bool) { self.tableView.tableFooterView = UIView(frame: CGRect.zeroRect) // OR self.tableView.tableFooterView = UIView() }для C#: (пожалуйста, не забудьте добавить
using CoreGraphics;)public override void ViewWillAppear(bool animated) { base.ViewWillAppear(animated); this.sampleTableview.TableFooterView = new UIView(frame: CGRect.Empty); }
