Cómo eliminar celdas vacías adicionales en TableViewController, iOS - Swift

118

Hola, tengo un TableViewControllercon dos celdas estáticas, sin embargo, cuando se muestra, muestra las dos celdas estáticas y luego todas las demás celdas vacías para la vista de tabla. Sin embargo, no quiero mostrar esas celdas porque son inútiles. ¿Cómo oculto el resto de las celdas aparte de las dos celdas estáticas?

Stephen Fox
fuente

Respuestas:

403

en su viewDidLoad()función agregue esta línea de código:

tableView.tableFooterView = UIView()
HorseT
fuente
4
¡Corto y eficaz! ¡Funcionó a la perfección!
yogipriyo
6
¿Qué significa esto? ¿Podría elaborar?
Jayprakash Dubey
Esta respuesta sigue siendo válida en Swift 3. Además, si establece el color de fondo de la vista de tabla igual que el color de fondo de la vista principal, parecerá que el pie de página se ha ido.
Micah Montoya
¿Existe una solución similar para NSTableView? No tiene tableFooterView.
ixany
SWIFT 3.0 funciona muy bien contableView.tableFooterView = UIView()
Marcelo Gracietti
19

Seleccione su UITableView, vaya al inspector de atributos y cambie el estilo a Agrupado.

ingrese la descripción de la imagen aquí

bakalolo
fuente
7

Para agregar a esto, la razón por la cual la configuración tableFooterViewde UIView()elimina las filas es porque está configurando un UIView()objeto vacío en la propiedad. Según la documentación de Apple:

var tableFooterView: UIView?

Por lo tanto, establecer un UIView () vacío no mostrará nada debajo de sus datos para esta propiedad.

Puede recuperar las filas vacías restableciendo tableFooterViewel valor predeterminado, así:

tableView.tableFooterView = nil
brindis
fuente
2
Lo siento, pero ¿no parece un truco?
AOY
2
No, esta es una forma completamente válida de hacerlo. Si quisiera establecer una tableFooterView personalizada, crearía una UIView personalizada, antes de establecerla en tableFooterView. Luego, restablecerlo a cero es simplemente devolverlo a su valor predeterminado.
brindis el
Veo. Gracias) Me parece un poco extraño porque soy nuevo en
Swift
6

La configuración tableFooterViewdebería eliminar las vistas extra de celdas.

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

También puede lograr esto en Storyboard simplemente arrastrando una vista al área de pie de página de la vista de tabla, y luego establezca su altura y color de fondo en 1 y borre respectivamente usando el inspector de propiedades.

(Esto supone que no puede o no desea usar la configuración de estilo de grupo por alguna razón. De lo contrario, simplemente hágalo).

quickthyme
fuente
3

Swift 4 Desarrollando la respuesta de HorseT, primero arrastre el control desde su Vista de tabla en su guión gráfico, a su clase de Controlador de vista y cree una salida llamada tableView.

@IBOutlet weak var tableView: UITableView!

Entonces, su viewDidLoad en su controlador de vista debería verse así:

    override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self

    tableView.tableFooterView = UIView()
}
elarcoiris
fuente
3

Basado en las respuestas anteriores en rápido .

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

si desea eliminar filas para todas UITableViewsen su aplicación, simplemente agregue una extensión como esta:

Swift 5.0

extension UITableView {

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

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

Llame a este código dentro del viewWillAppearmétodo. Y funcionará

Mannopson
fuente
1

Agregue el código de abajo en sus funciones " override func viewDidLoad () " o "override func viewWillAppear (_ animated: Bool)" .

tblOutletName.tableFooterView = UIView ()

Dhaval Gevariya
fuente
0

Simplemente agregue:

tableView.tableFooterView = UIView()

Explicación:

Esto es totalmente válido y funciona perfectamente en swift 3.By Dado que está configurando un objeto UIView () vacío en la propiedad, al establecer tableFooterView en UIView () se eliminan las filas.

Tejas
fuente
-2

Abobe anwer tiene razón. Podemos lograr esto agregando

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

Probé tableview.tableFooterView = UIView () y no funcionó para mí. Estoy usando un TableViewViewCell personalizado, quizás por eso.

Aunque encontré un truco. En mi func numberOfRowsInSection

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

Y eso hace que mi UITableViewCell personalizada extra en blanco ya no se muestre. Por supuesto que es el extra en blanco. Lo probaré un poco más agregando más celdas. Como referencia, estoy usando Swift 3, Firebase, una clase de celda personalizada, dentro de la función cellForRowAt.

Cory Billeaud
fuente
Esto no mostrará el último elemento de la matriz.
elarcoiris