Как удалить лишние пустые ячейки в TableViewController, iOS - Swift

118

Привет, у меня есть TableViewControllerдве статические ячейки, однако при отображении он показывает две статические ячейки, а затем все другие пустые ячейки для представления таблицы. Однако я не хочу отображать эти ячейки, поскольку они бесполезны. Как мне скрыть остальные ячейки, кроме двух статических ячеек?

Стивен Фокс
источник

Ответы:

405

в вашей viewDidLoad()функции добавьте эту строку кода:

tableView.tableFooterView = UIView()
Horset
источник
4
Коротко и эффективно! Работал как шарм!
yogipriyo 02
6
Что это значит? Не могли бы вы уточнить?
Джайпракаш Дубей
Этот ответ все еще действителен в Swift 3. Кроме того, если вы установите цвет фона табличного представления таким же, как цвет фона основного представления, он будет выглядеть так, как будто нижний колонтитул исчез.
Мика Монтойя
Есть ли подобное решение для NSTableView? У него нет файла tableFooterView.
ixany
SWIFT 3.0 отлично работает сtableView.tableFooterView = UIView()
Марсело Грасетти
19

Выберите свой UITableView, перейдите в инспектор атрибутов и измените стиль на Сгруппированный.

введите описание изображения здесь

bakalolo
источник
7

Чтобы добавить к этому, причина, по которой установка tableFooterViewдля UIView()удаления строк, заключается в том, что вы устанавливаете пустой UIView()объект для свойства. Согласно документации Apple:

var tableFooterView: UIView?

Поэтому установка пустого UIView () ничего не отобразит под вашими данными для этого свойства.

Вы можете вернуть пустые строки, сбросив tableFooterViewзначение по умолчанию, например:

tableView.tableFooterView = nil
тост
источник
2
Извините, но разве это не похоже на взлом?
AOY
2
Нет, это вполне допустимый способ сделать это. Если вы хотите установить собственный tableFooterView, вы должны создать собственный UIView, прежде чем устанавливать для него tableFooterView. Затем сброс до nil просто возвращает его к значению по умолчанию.
тост
Понимаю. Спасибо) Для меня это выглядит немного странно, так как я новичок в Swift
AOY
6

Установка tableFooterViewдолжна удалить лишние ячейки, такие как представления.

   @IBOutlet weak var tableView: UITableView! {
        didSet {
            tableView.tableFooterView = UIView(frame: .zero)
        }
    }
Жанг
источник
3

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

(Предполагается, что вы либо не можете, либо не хотите просто использовать настройку стиля группы по какой-то причине. В противном случае просто сделайте это.)

quickthyme
источник
3

Swift 4 Разрабатывая ответ HorseT, сначала перетащите элемент управления из представления таблицы в раскадровке в класс контроллера представления и создайте выход под названием tableView.

@IBOutlet weak var tableView: UITableView!

Тогда ваш viewDidLoad в вашем контроллере представления должен выглядеть примерно так:

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self

    tableView.tableFooterView = UIView()
}
elarcoiris
источник
3

Основываясь на приведенных выше ответах быстро .

tableView.tableFooterView = UIView(frame: .zero)
Ризван Мехбуб
источник
2

если вы хотите удалить строки для всех UITableViewsв своем приложении, просто добавьте такое расширение:

Swift 5.0

extension UITableView {

override open func didMoveToSuperview() {
    super.didMoveToSuperview()
    self.tableFooterView = UIView()

}
mkhoshpour
источник
2
tableView.tableFooterView = UIView.init(frame: CGRect.zero)

Вызовите этот код в viewDidLoadметоде.

Mannopson
источник
1

Добавьте код ниже в свои функции « переопределить функцию viewDidLoad () » или «переопределить функцию viewWillAppear (_ animated: Bool)» .

tblOutletName.tableFooterView = UIView ()

Дхавал Гевария
источник
0

Просто добавьте:

tableView.tableFooterView = UIView()

Объяснение:

Это полностью верно и отлично работает в swift 3. По так как вы устанавливаете пустой объект UIView () для свойства, установка tableFooterView на UIView () удаляет строки.

Tejas
источник
-2

Абобе ответ прав. Мы можем добиться этого, добавив

tableView.tableFooterView = UIView() // to remove extra cells in tableView
Уммар Ахмед
источник
-3

Я попробовал tableview.tableFooterView = UIView (), и у меня это не сработало. Я использую собственный TableViewViewCell, возможно, поэтому.

Я все же нашел хак. В моем func numberOfRowsInSection

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return yourArrayClass.count - 1
}

И из-за этого мой дополнительный пустой пользовательский UITableViewCell больше не отображается. Конечно, это лишний пустой. Я протестирую это еще немного, добавив больше ячеек. Для справки я использую Swift 3, Firebase, пользовательский класс ячеек внутри функции cellForRowAt.

Кори Бийо
источник
Это не будет отображать последний элемент в массиве.
elarcoiris 07