Как убрать пустые ячейки в UITableView? [Дубликат]

338

Я пытаюсь отобразить простой UITableView с некоторыми данными. Я хочу установить статическую высоту UITableView, чтобы она не отображала пустые ячейки в конце таблицы. как это сделать?

код:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    NSLog(@"%d", [arr count]);
    return [arr count];
}
  • 0
    поставьте свой код пожалуйста :)
  • 0
    установите numberOfRows правильно, тогда он не будет показывать пустые ячейки
Теги:
uitableview

11 ответов

857
Лучший ответ

Установите нижний колонтитул таблицы высоты нулевой высоты (возможно, в вашем методе viewDidLoad), например:

Swift:

tableView.tableFooterView = UIView()

Objective-C:

tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

Поскольку таблица считает, что есть нижний колонтитул, он не отображает никаких ячеек, кроме тех, которые вы явно просили.

Прокрутка конструктора интерфейса:

Если вы используете xib/Storyboard, вы можете просто перетащить UIView (с высотой 0pt) в нижнюю часть UITableView.

  • 0
    В каком методе будет добавлена эта строка кода? tableView willDisplayFooterView ??
  • 2
    @ Jupiter869 Я просто положил его в ViewDidLoad, и он работает
Показать ещё 7 комментариев
95

Синтаксис Swift 3:

tableView.tableFooterView = UIView(frame: .zero)

Синтаксис Swift: < 2.0

tableView.tableFooterView = UIView(frame: CGRect.zeroRect)

Синтаксис Swift 2.0:

tableView.tableFooterView = UIView(frame: CGRect.zero)
  • 3
    Теперь это tableView.tableFooterView = UIView (frame: CGRect.zero)
  • 0
    Протестировано с ios 8+ и работает отлично.
Показать ещё 2 комментария
53

В раскадровке выберите UITableView и измените свойство Style с Plain на Grouped.

  • 0
    лучший и самый прямой ответ 1
  • 3
    Но это добавляет дополнительный интервал над и под разделами таблицы.
14

Реализовано с быстрым на Xcode 6.1

self.tableView.tableFooterView = UIView(frame: CGRectZero)
self.tableView.tableFooterView?.hidden = true

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

Ответ, взятый из этой ссылки Не удается скрыть пустые ячейки в UITableView Swift

  • 0
    Это было сделано для меня с помощью Swift & XCode 6.1! Пробовал Swift-эквивалентные версии ответов выше, но безуспешно.
11

Я не могу добавить комментарий на данный момент, поэтому добавив это в качестве ответа.

@Любой ответ хорош, и те же результаты могут быть достигнуты с помощью следующей строки кода:

tableView.tableFooterView = [UIView new];

"новый" метод принадлежит NSObject класса и вызывает alloc и init методов UIView.

  • 0
    Это работает хорошо, но технически не совпадает с ответом Энди. Использование new просто вызывает метод «init», но нет никакой гарантии, что [myView init] и [myView initWithFrame: CGRectZero] одинаковы, хотя в сегодняшней реализации они кажутся.
6

Я пробовал код:

tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

В разделе viewDidLoad и xcode6 появилось предупреждение. Я поставил "я". перед ним, и теперь он отлично работает. поэтому рабочий код, который я использую:

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
2

или вы можете вызвать метод tableView, чтобы установить высоту нижнего колонтитула в 1 точку, и она добавит последнюю строку, но вы также можете скрыть ее, установив цвет фона нижнего колонтитула.

код:

func tableView(tableView: UITableView,heightForFooterInSection section: Int) -> CGFloat {
     return 1
}

выглядит как последняя строка

1

Использование UITableViewController

Принятое решение изменит высоту TableViewCell. Чтобы исправить это, выполните следующие шаги:

  • Введите фрагмент кода, приведенный ниже, в ViewDidLoad.

    tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

  • Добавьте следующий метод в файл TableViewClass.m.

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
    {
        return (cell height set on storyboard); 
    }
    

Что это. Вы можете создавать и запускать свой проект.

1
override func viewWillAppear(animated: Bool) {
    self.tableView.tableFooterView = UIView(frame: CGRect.zeroRect)

/// OR 

    self.tableView.tableFooterView = UIView()
}
0

в следующем методе:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (([array count]*65) > [UIScreen mainScreen].bounds.size.height - 66)
    {
        Table.frame = CGRectMake(0, 66, self.view.frame.size.width, [array count]*65)); 
    }
    else
    {
        Table.frame = CGRectMake(0, 66, self.view.frame.size.width, [UIScreen mainScreen].bounds.size.height - 66);
    }
    return [array count];
}

здесь 65 - высота ячейки, а 66 - высота навигационной панели в UIViewController.

-3

in viewDidLoad:

self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];

Ещё вопросы

Сообщество Overcoder
Наверх
Меню