Как удалить лишние пустые ячейки в 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.