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


118

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

Ответы:


405

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

tableView.tableFooterView = UIView()

4
Коротко и эффективно! Работал как шарм!
yogipriyo 02

6
Что это значит? Не могли бы вы уточнить?
Джайпракаш Дубей

Этот ответ все еще действителен в Swift 3. Кроме того, если вы установите цвет фона табличного представления таким же, как цвет фона основного представления, он будет выглядеть так, как будто нижний колонтитул исчез.
Мика Монтойя

Есть ли подобное решение для NSTableView? У него нет файла tableFooterView.
ixany

SWIFT 3.0 отлично работает сtableView.tableFooterView = UIView()
Марсело Грасетти

19

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

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


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 и очистите его соответственно с помощью инспектора свойств.

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


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()
}


2

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

Swift 5.0

extension UITableView {

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

}

2
tableView.tableFooterView = UIView.init(frame: CGRect.zero)

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


1

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

tblOutletName.tableFooterView = UIView ()


0

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

tableView.tableFooterView = UIView()

Объяснение:

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


-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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.