как скрыть пустые строки в UITableView и изменить высоту Uitableview на основе непустых строк


у меня есть пара проблем с моим UITableView.

  1. когда я добавить UITableview на моей странице, по умолчанию он вызывает некоторое фиксированное количество строк, даже если я установил количество строк в разделе как 1. Все строки отображаются, кроме первой строки,и все пустые строки. Итак, я хочу скрыть все пустые строки в UItableview.

  2. на основе непустых строк, я хочу изменить высоту моего UItableView.

11 60

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. Это по существу то же самое, что и большинство ответов здесь, но он сохраняет некоторые особенности пользовательского интерфейса в представлении, а не в контроллере представления.

enter image description here

[self.SomeTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];

используйте это, чтобы избавиться от строк, если UITableView пусто.

в методе, который возвращает количество строк, укажите count динамически себя. Например, если вы собираетесь заполнить таблицу, скажем a NSArray имени arrayForRows:

return [arrayForRows count]; // inside the method which returns the number of rows.

выше приведен простой пример заполнения таблицы массивом в качестве источника данных. Нет пустых строк. Только то, что многие строки отображаются в таблице в соответствии с count элементов в массиве заполнить таблицу.

Я думаю, что вы имеете в виду высоту строки в таблице. Вы можно поиграть с высотой строк с помощью метода:

(CGFloat)tableView:(UITableView  *)tableView heightForRowAtIndexPath:(NSIndexPath  *)indexPath

читать http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableViewDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UITableViewDelegate/tableView:heightForRowAtIndexPath:

EDIT: ах теперь я получаю то, что вы пытаетесь достичь. Вы пытаетесь избежать отображения пустых строк, разделенных этими разделительными линиями правильно? Видеть это сообщение:

как отобразить таблицу с нулевыми строками в UITableView

немного скрыто в ответе Борна; если вы хотите скрыть нижние пустые строки в простом tableview с несколькими разделами, используйте этот ответ:

https://stackoverflow.com/a/5658100/580173

Для 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);
}