Como remover células vazias extras em TableViewController, iOS - Swift

118

Oi eu tenho um TableViewControllercom duas células estáticas, no entanto, quando exibido, ele mostra as duas células estáticas e, em seguida, todas as outras células vazias para o tableview. No entanto, não quero exibir essas células porque são inúteis. Como oculto o resto das células além das duas células estáticas?

Stephen Fox
fonte

Respostas:

403

em sua viewDidLoad()função, adicione esta linha de código:

tableView.tableFooterView = UIView()
HorseT
fonte
4
Curto e eficaz! Funcionou como charme!
Yogipriyo 02 de
6
O que isto significa? Você poderia elaborar?
Jayprakash Dubey
Essa resposta ainda é válida no Swift 3. Além disso, se você definir a cor de fundo do tableview da mesma forma que a cor de fundo das visualizações principais, parecerá que o rodapé sumiu.
Micah Montoya
Existe uma solução semelhante para NSTableView? Não tem um tableFooterView.
ixany
SWIFT 3.0 funciona muito bem comtableView.tableFooterView = UIView()
Marcelo Gracietti
19

Selecione seu UITableView, vá para o inspetor de atributos e altere o estilo para Agrupado.

insira a descrição da imagem aqui

Bakalolo
fonte
7

Para adicionar a isso, o motivo pelo qual definir tableFooterViewpara UIView()remove as linhas é porque você está definindo um UIView()objeto vazio para a propriedade. De acordo com a documentação da Apple:

var tableFooterView: UIView?

Portanto, definir um UIView () vazio não exibirá nada abaixo de seus dados para esta propriedade.

Você pode trazer as linhas vazias de volta, redefinindo tableFooterViewpara o valor padrão, assim:

tableView.tableFooterView = nil
torrada
fonte
2
Desculpe, mas não parece um hack?
AOY de
2
Não, esta é uma maneira completamente válida de fazer isso. Se você quiser definir um tableFooterView personalizado, crie um UIView personalizado antes de defini-lo como tableFooterView. Em seguida, redefini-lo para zero significa apenas retorná-lo ao valor padrão.
brinde de
Entendo. Obrigado) Parece um pouco estranho para mim, pois sou novo no Swift
AOY,
6

Definir o tableFooterViewdeve remover células extras como visualizações.

   @IBOutlet weak var tableView: UITableView! {
        didSet {
            tableView.tableFooterView = UIView(frame: .zero)
        }
    }
Giang
fonte
3

Você também pode conseguir isso no Storyboard simplesmente arrastando uma visualização para a área de rodapé da visualização da tabela e, em seguida, definir sua altura e cor de fundo para 1 e limpar, respectivamente, usando o inspetor de propriedades.

(Isso pressupõe que você não pode ou não deseja apenas usar a configuração de estilo de Grupo por algum motivo. Caso contrário, basta fazer isso.)

tom rápido
fonte
3

Swift 4 Elaborando a resposta do HorseT, primeiro controle o arraste de seu Table View em seu storyboard, para sua classe View Controller e crie uma saída chamada tableView.

@IBOutlet weak var tableView: UITableView!

Então, seu viewDidLoad em seu View Controller deve ser parecido com isto:

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self

    tableView.tableFooterView = UIView()
}
Elarcoiris
fonte
3

Com base nas respostas acima rapidamente .

tableView.tableFooterView = UIView(frame: .zero)
Rizwan Mehboob
fonte
2

se você deseja remover linhas para todos UITableViewsem seu aplicativo, basta adicionar uma extensão como esta:

Swift 5.0

extension UITableView {

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

}
mkhoshpour
fonte
1
tableView.tableFooterView = UIView.init(frame: CGRect.zero)

Chame este código dentro do viewWillAppearmétodo. E vai funcionar

Mannopson
fonte
1

Adicione o código abaixo em suas funções " override func viewDidLoad () " ou "override func viewWillAppear (_ animated: Bool)" .

tblOutletName.tableFooterView = UIView ()

Dhaval Gevariya
fonte
0

Basta adicionar:

tableView.tableFooterView = UIView()

Explicação:

Isso é totalmente válido e funciona perfeitamente no swift 3.By. Já que você está definindo um objeto UIView () vazio para a propriedade, Definir tableFooterView como UIView () remove as linhas.

Tejas
fonte
-2

Abobe anwer está certo. Podemos conseguir isso adicionando

tableView.tableFooterView = UIView() // to remove extra cells in tableView
Ummar Ahmed
fonte
-3

Tentei tableview.tableFooterView = UIView () e não funcionou para mim. Estou usando um TableViewViewCell personalizado, talvez seja por isso.

Eu encontrei um hack tho. Na minha função numberOfRowsInSection

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

E isso faz com que meu UITableViewCell personalizado em branco extra não seja mais exibido. Claro que é o em branco extra. Vou testá-lo um pouco mais adicionando mais células. Para referência, estou usando Swift 3, Firebase, uma classe de célula personalizada, dentro da função cellForRowAt.

Cory Billeaud
fonte
Isso não exibirá o último item da matriz.
elarcoiris