ios - tutorial - Eliminar los separadores adicionales debajo de UITableView
Constructor de interfaces (iOS 9+)
Simplemente arrastre una vista a la tabla. En el guión gráfico, se ubicará en la parte superior debajo de las celdas personalizadas. Puedes preferir llamarlo "pie de página".
Aquí se muestra en verde para mayor claridad, probablemente querrás 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:
Rápido
override func viewDidLoad() {
super.viewDidLoad()
self.tableView.tableFooterView = UIView()
}
C objetivo
iOS 6.1+
- (void)viewDidLoad
{
[super viewDidLoad];
// This will remove extra separators from tableview
self.tableView.tableFooterView = [UIView new];
}
o si prefieres,
self.tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
Históricamente en iOS:
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];
}
Para Swift:
override func viewDidLoad() {
super.viewDidLoad()
tableView.tableFooterView = UIView()
}
Para iOS 7+ usando Storyboards
Simplemente arrastre una vista UIView
a su UITableView
como pie de página. Establezca la altura de la vista de pie de página en 0.
Acabo de agregar esta línea en la función ViewDidLoad y se solucionó el problema.
tableView.tableFooterView = [[UIView alloc] init];
Aquí hay otra forma de hacerlo sin el estilo de tabla agrupada, y una que probablemente no adivinaría. Agregar un encabezado y un pie de página a la tabla (tal vez uno o el otro sea suficiente, no lo he comprobado) 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 tablas para disminuir el riesgo de golpear los 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 eliminará las líneas separadoras 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 corté el método addHeaderAndFooter para verificarlo. Sin él , tengo los separadores de fila adicionales; con el código, tengo lo que ves en esta ventana snap: 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í tener un pie de página personalizado en una vista de tabla necesariamente tendría que dejar de dibujar separadores de filas para las filas en blanco debajo de él. Eso sería horrible. Para 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.
Tal vez sus vistas personalizadas no fueron realmente añadidas. Para verificar esto, establezca el color de fondo en un valor diferente a clearColor
, por ejemplo, [UIColor redColor]
. Si no ve algunas barras rojas en la parte inferior de la tabla, no se estableció su pie de página.
Avanzando la solución de J. Costa: puede hacer un cambio global a la tabla al poner esta línea de código:
[[UITableView appearance] setTableFooterView:[[UIView alloc] initWithFrame:CGRectZero]];
dentro del primer método poosible (generalmente en AppDelegate, en: application: didFinishLaunchingWithOptions: method).
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()
}
En Swift (estoy usando 4.0), puedes lograr esto creando una clase personalizada de UITableViewCell y anulando el método setSelected. Luego, el separador inserta todo a 0. (mi clase principal con la vista de tabla tiene un fondo claro) de 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)
}
En caso de que tenga una barra de búsqueda en la vista (para limitar el número de resultados, por ejemplo), también debe agregar lo siguiente en shouldReloadTableForSearchString y shouldReloadTableForSearchScope:
controller.searchResultsTable.footerView = [ [ UIView alloc ] initWithFrame:CGRectZero ];
Estaba usando una vista de tabla para mostrar un número fijo de filas de altura fija, así que simplemente lo cambié de tamaño y lo hice no desplazable.
He añadido esta pequeña extensión de vista de tabla que ayuda en todo
extension UITableView {
func removeExtraCells() {
tableFooterView = UIView(frame: .zero)
}
}
Me gustaría extender wkw respuesta:
Simplemente agregando 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: donde configura 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 - para eliminar simplemente cualquier separador:
[_tableView setTableFooterView:[UIView new]];
Gracias a wkw de nuevo :)
Para eliminar las líneas separadoras adicionales de 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 me funciona todo el tiempo, inténtalo tú mismo. @KPCoding ...
Prueba esto
self.tables.tableFooterView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 320.0f, 10.0f)];
Prueba esto. Funcionó para mí:
- (void) viewDidLoad
{
[super viewDidLoad];
// Without ARC
//self.tableView.tableFooterView = [[[UIView alloc] init] autorelease];
// With ARC, tried on Xcode 5
self.tableView.tableFooterView = [UIView new];
}
Rápido y fácil Swift 4 vías.
override func viewDidLoad() {
tableView.tableFooterView = UIView(frame: .zero)
}
Si estás teniendo células estáticas. También puede desactivar el separador de la ventana del Inspector. (esto no será deseable si necesita el separador. En ese caso, use el método que se muestra arriba)
Sé que esta pregunta ha sido aceptada respuesta, pero pongo aquí diferentes formas de cómo ocultar la línea separadora Extra de UITableView
.
Puede ocultar la línea de separación estándar de tableView
y agregar su línea personalizada en la parte superior de cada celda.
Actualizar:
La forma más fácil de agregar separador personalizado es agregar UIView
simple de altura de 1px:
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 sencilla forma que me gusta de siempre.
self.tableView.tableFooterView = [[UIView alloc] init];
Pruebe cualquiera de uno;
Si desea eliminar el espacio no deseado en UITableview, puede utilizar los dos métodos siguientes
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
return 0.1;
}
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
return 0.1;
}
Si está utilizando Swift, agregue el siguiente código a viewDidLoad del controlador que administra la vista de tabla:
override func viewDidLoad() {
super.viewDidLoad()
//...
// Remove extra separators
tableView.tableFooterView = UIView(frame: CGRectZero)
}
Si estás sub-clasificando el UITableView necesitas hacer esto ...
-(void)didMoveToSuperview {
[super didMoveToSuperview];
self.tableFooterView = [UIView new];
}
Si no desea ningún separador después de la última celda, entonces necesita una altura cercana a cero pero no cero para su pie de página.
En su UITableViewDelegate
:
func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
return .leastNormalMagnitude
}
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 (según el gusto de su / su cliente / su gerente de proyecto)
Si tiene más secciones y no quiere meterse con los encabezados (incluso si es solo una línea en el caso más simple), entonces necesita establecer una vista UIView como pie de página, como se explicó en las respuestas anteriores)
Solo agregue una vista con el color de separación deseado como color de fondo, 100% de ancho, 1px de altura en la posición x0 y-1 de su tableViewCell. Asegúrese de que la tableViewCell no recorte subvistas, en lugar de la tableView debería.
Por lo tanto, obtiene un separador absolutamente 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.
Solo puedes agregar un pie de página vacío al final, luego se ocultarán 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, ya que 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
Tuve un poco de suerte al implementar una sola parte de la respuesta aceptada (iOS 9+, Swift 2.2). Había intentado 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 su lugar, solo tuve que anular el método viewForFooterInSection
(no configuré el tableFooterView
otra parte):
override func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
return UIView(frame: .zero)
}
Esto funcionó bien para un tableView
con una sola sección (si tiene varias secciones, debe especificar la última).
sólo tiene que añadir este código ( Swift ). .
tableView.tableFooterView = UIView()
uitableview línea separadora adicional oculta separadoras adicionales líneas oculta en swift 3.0
self.tbltableView.tableFooterView = UIView(frame: .zero)
UIKit
no crea una celda vacía cuando el tableView
tiene un tableFooterView
. Así que podemos hacer un truco y asignar un objeto UIView
altura cero como pie de página de tableView
.
tableView.tableFooterView = UIView()
SWIFT 3.0 funciona muy bien con tableView.tableFooterView = UIView()