как скрыть пустые строки в 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 *)indexPath
EDIT: ах теперь я получаю то, что вы пытаетесь достичь. Вы пытаетесь избежать отображения пустых строк, разделенных этими разделительными линиями правильно? Видеть это сообщение:
немного скрыто в ответе Борна; если вы хотите скрыть нижние пустые строки в простом 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); }