Cuando configuro una vista de tabla con 4 filas, todavía hay líneas de separadores adicionales (o celdas en blanco adicionales) debajo de las filas rellenas.
¿Cómo eliminaría estas células?
Cuando configuro una vista de tabla con 4 filas, todavía hay líneas de separadores adicionales (o celdas en blanco adicionales) debajo de las filas rellenas.
¿Cómo eliminaría estas células?
Respuestas:
Simplemente arrastre un UIView a la mesa. En el guión gráfico, se ubicará en la parte superior debajo de las celdas personalizadas. Es posible que prefiera llamarlo "pie de página".
Aquí se muestra en verde para mayor claridad, probablemente desee un color claro.
Tenga en cuenta que al ajustar la altura, puede afectar la forma en que se maneja el "rebote inferior" de la tabla, como prefiera. (La altura cero suele estar bien).
Para hacerlo programáticamente:
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}
o si lo prefieres
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Agregar al controlador de vista de tabla ...
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return CGFLOAT_MIN;
}
y si es necesario ...
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
return [UIView new];
// If you are not using ARC:
// return [[UIView new] autorelease];
}
tableFooterView
deja un separador en la última celda de la fila, ya que la tabla todavía anticipa el contenido debajo de esa celda. Usar la forma histórica eliminará ese último separador y se verá mejor en general.
Aquí hay otra forma de hacerlo sin el estilo de tabla agrupada, y una que probablemente no adivinará. Agregar un encabezado y pie de página a la tabla (tal vez uno u otro es suficiente, no se ha marcado) hace que los separadores desaparezcan de las filas de relleno / en blanco.
Me topé con esto porque quería un poco de espacio en la parte superior e inferior de las mesas para disminuir el riesgo de presionar botones en lugar de una celda de la mesa con dedos carnosos. Aquí hay un método para pegar una vista en blanco como encabezado y pie de página. Use la altura que desee, aún elimina las líneas de separación adicionales.
- (void) addHeaderAndFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.myTableView setTableHeaderView:v];
[self.myTableView setTableFooterView:v];
[v release];
}
En respuesta a @Casebash, volví al código en mi aplicación ("AcmeLists" List Manager en la tienda de iTunes ...) y cortocircuité el método addHeaderAndFooter para verificar. Sin él , tengo los separadores de fila adicionales; con el código, tengo lo que ves en esta ventana: no hay imagen de separadores de fila de tabla . Así que no estoy seguro de por qué no habría funcionado para ti. Además, tiene sentido para mí que tener un pie de página personalizado en una vista de tabla necesariamente tenga que dejar de dibujar separadores de fila para filas en blanco debajo de él. Eso sería horrible. Como referencia, miré las tablas donde había más filas de las que se podían ver en la pantalla, y luego una tabla con dos filas. En ambos casos, no hay separadores extraños.
Quizás sus vistas personalizadas no se agregaron realmente. Para comprobar esto, establecer el color de fondo a algo distinto clearColor
, por ejemplo, [UIColor redColor]
. Si no ve algunas barras rojas en la parte inferior de la tabla, su pie de página no está configurado.
Eliminar líneas de separación adicionales para filas vacías en UITableView en Swift
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.yourTableview.tableFooterView = UIView()
}
Me gustaría extender la respuesta wkw :
Simplemente agregar solo pie de página con altura 0 hará el truco. (probado en SDK 4.2, 4.4.1)
- (void) addFooter
{
UIView *v = [[UIView alloc] initWithFrame:CGRectZero];
[self.myTableView setTableFooterView:v];
}
o incluso más simple: cuando configure su vista de tabla, agregue esta línea:
//change height value if extra space is needed at the bottom.
[_tableView setTableFooterView:[[UIView alloc] initWithFrame:CGRectMake(0,0,0,0)]];
o incluso más simple: simplemente eliminar cualquier separador:
[_tableView setTableFooterView:[UIView new]];
Gracias a wkw otra vez :)
Simplemente arrastre UIView
a UITableView
como su pie de página. Establezca la altura de la vista de pie de página en 0.
Prueba esto. A mí me funcionó:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
Si está utilizando Swift, agregue el siguiente código para verDidLoad del controlador que administra la vista de tabla:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView()
}
Puede agregar un pie de página vacío al final y luego ocultará las celdas vacías, pero también se verá bastante feo:
tableView.tableFooterView = UIView()
Hay un mejor enfoque: agregue una línea de 1 punto al final de la vista de tabla como el pie de página y las celdas vacías tampoco se mostrarán más.
let footerView = UIView()
footerView.frame = CGRect(x: 0, y: 0, width: tableView.frame.size.width, height: 1)
footerView.backgroundColor = tableView.separatorColor
tableView.tableFooterView = footerView
solo agregue este código ( Swift ). .
tableView.tableFooterView = UIView()
Avanzando en la solución de J. Costa: puede hacer un cambio global en la tabla poniendo esta línea de código:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
dentro del primer método posible (generalmente en AppDelegate
, en: application:didFinishLaunchingWithOptions:
método).
Sé que esta pregunta ha sido aceptada como respuesta, pero pongo aquí diferentes formas de cómo ocultar la línea de separación adicional de UITableView
.
Puede ocultar tableView
la línea de separación estándar y agregar su línea personalizada en la parte superior de cada celda.
Actualizar:
La forma más fácil de agregar un separador personalizado es agregar simples UIView
altura de 1 px:
UIView* separatorLineView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 1)];
separatorLineView.backgroundColor = [UIColor grayColor]; /// may be here is clearColor;
[cell.contentView addSubview:separatorLineView];
O
self.tblView=[[UITableView alloc] initWithFrame:CGRectMake(0,0,320,370) style:UITableViewStylePlain];
self.tblView.delegate=self;
self.tblView.dataSource=self;
[self.view addSubview:self.tblView];
UIView *v = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 10)];
v.backgroundColor = [UIColor clearColor];
[self.tblView setTableHeaderView:v];
[self.tblView setTableFooterView:v];
[v release];
O
- (float)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section {
// This will create a "invisible" footer
return 0.01f;
}
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
// To "clear" the footer view
return [[UIView new] autorelease];
}
O La mejor y más simple forma que me gusta es
self.tableView.tableFooterView = [[UIView alloc] init];
Prueba cualquiera de uno;
Puede encontrar muchas respuestas a esta pregunta. La mayoría de ellos alrededor de la manipulación con UITableView
el tableFooterView
atributo de y esta es la forma correcta de ocultar filas vacías. Por conveniencia, he creado una extensión simple que permite activar / desactivar filas vacías desde Interface Builder. Puede consultarlo desde este archivo GIST . Espero que pueda ahorrar un poco de tu tiempo.
extension UITableView {
@IBInspectable
var isEmptyRowsHidden: Bool {
get {
return tableFooterView != nil
}
set {
if newValue {
tableFooterView = UIView(frame: .zero)
} else {
tableFooterView = nil
}
}
}
}
Uso:
tableView.isEmptyRowsHidden = true
uitableview línea de separación adicional ocultar líneas de separación adicionales ocultar en swift 3.0
self.tbltableView.tableFooterView = UIView(frame: .zero)
Si no desea ningún separador después de la última celda, necesita una altura cercana a cero pero distinta de cero para su pie de página.
En su UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
Swift funciona muy bien con:
tableView.tableFooterView = UIView()
Simplemente agregue una vista con el color del separador deseado como color de fondo, 100% de ancho, 1px de altura en la posición x0 y-1 a su tableViewCell. Asegúrese de que tableViewCell no recorta subvistas, sino que tableView debería.
Por lo tanto, obtienes un separador simple y funcional solo entre las celdas existentes sin ningún hack por código o IB.
Nota: en un rebote vertical superior aparece el primer separador, pero eso no debería ser un problema porque es el comportamiento predeterminado de iOS.
Para eliminar las líneas de separación adicionales desde la parte inferior de UItableview mediante programación, simplemente escriba las siguientes dos líneas de código y eliminará el separador adicional.
tableView.sectionFooterHeight = 0.f;
tableView.sectionHeaderHeight = 0.f;
Este truco funciona para mí todo el tiempo, pruébalo tú mismo.
Tuve suerte implementando una sola pieza de la respuesta aceptada (iOS 9+, Swift 2.2). Intenté implementar:
self.tableView.tableFooterView = UIView(frame: .zero)
Sin embargo, no hubo ningún efecto en mi tableView
, creo que puede tener algo que ver con el hecho de que estaba usando UITableViewController
.
En cambio, solo tuve que anular el viewForFooterInSection
método (no configuré el tableFooterView
otro lugar):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Esto funcionó bien para una tableView
con una sola sección (si tiene varias secciones, debe especificar la última).
Si solo tiene una sección, la forma más rápida y sencilla es configurar el Estilo de vista de tabla de "Normal" a "Agrupado". (ver imagen)
Si tiene más secciones, es posible que deba establecer la altura del encabezado en cero (dependiendo del gusto de su / su cliente / gerente de proyecto)
Si tiene más secciones y no desea meterse con los encabezados (incluso si es solo una línea en el caso más simple), entonces debe establecer una UIView como pie de página, como se explicó en las respuestas anteriores)
Rápido y fácil Swift de 4 vías.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Si tienes celdas estáticas. También puede desactivar el separador desde la ventana del Inspector. (Esto no será deseable si necesita el separador. En ese caso, utilice el método que se muestra arriba)
super.viewDidLoad()
) y está incluido en la respuesta wiki en la parte superior. En cuanto a eliminar todos los separadores, de eso no se trata realmente esta pregunta, así que mejor deshaga su última edición y / o elimine su respuesta por completo.
Si desea eliminar el espacio no deseado en UITableview, puede usar a continuación dos métodos
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
He agregado esta pequeña extensión de vista de tabla que ayuda en todo
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Intenta con esto
para el objetivo C
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.yourTableView.tableFooterView = [UIView new];
}
para Swift
override func viewDidLoad() {
super.viewDidLoad()
self.yourTableView.tableFooterView = UIView()
}
En caso de que tenga un searchbar
en su view
(para limitar el número de resultados, por ejemplo), también debe agregar lo siguiente en shouldReloadTableForSearchString
yshouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
En Swift (estoy usando 4.0), puede lograr esto creando una UITableViewCell
clase personalizada y overriding
el setSelected
método. Entonces separator insets
todo a 0 . (mi clase principal con la vista de tabla tiene un fondo claro) color.
override func setSelected(_ selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// eliminate extra separators below UITableView
self.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}