Estoy personalizando a UITableView
. Quiero ocultar la línea que se separa en la última celda ... ¿puedo hacer esto?
Sé que puedo hacerlo, tableView.separatorStyle = UITableViewCellStyle.None
pero eso afectaría a todas las celdas de tableView. Quiero que solo afecte a mi última celda.
Respuestas:
en
viewDidLoad
, agregue esta línea:y en
cellForRowAtIndexPath
:para versiones inferiores de iOS
para versiones superiores de iOS 7 (incluido iOS 8)
fuente
[cell.contentView addSubview:line]
lugar de[cell addSubview:line]
cellForRowAtIndexPath
. Recuerda que las células se reutilizan. Cada vez que se reutilice esta celda, agregará otra vista de línea de separación. En listas grandes, esto puede afectar el rendimiento del desplazamiento. Y simplemente no es la forma correcta de hacerlo.Puedes usar el siguiente código:
Rápido:
o:
para el margen predeterminado:
para mostrar el separador de extremo a extremo
C objetivo:
fuente
UITableView
, mientras que la respuesta aceptada sí.self.tableView.separatorColor = [UIColor clearColor];
arregló.cell.separatorInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, cell.bounds.size.width-cell.layoutMargins.left);
si no resta el valor cell.layoutMargins.left, la línea de separación se dibuja desde el borde izquierdo hasta el margen izquierdo (si tiene alguno).textLabel
fuera de la pantalla.Para dar seguimiento a la respuesta de Hiren .
en ViewDidLoad y la siguiente línea:
O, si está utilizando XIB o Storyboards, cambie " separador " a " ninguno ":
Y en CellForRowAtIndexPath agregue esto:
Aquí hay un ejemplo del resultado donde visualizo una vista de tabla con Celdas dinámicas (pero solo tengo una sola con contenido). El resultado es que solo ese tiene un separador y no todas las vistas de tabla "falsas" se agregan automáticamente para llenar la pantalla.
Espero que esto ayude.
EDITAR: Para aquellos que no siempre leen los comentarios, en realidad hay una mejor manera de hacerlo con unas pocas líneas de código:
fuente
Si no desea dibujar el separador usted mismo, use esto:
Sin embargo, esta API solo está disponible a partir de iOS 7.
fuente
separatorInset
parece insertar el contenido de la celda, así como el separador, lo que requiere otro truco para compensar:cell.IndentationWidth = -10000;
separatorInset
0 en la parte superior, izquierda e inferior y el ancho de la celda a la derecha:cell.separatorInset = UIEdgeInsetsMake(0, 0, 0, cell.bounds.size.width);
esto evita la necesidad de ajustar cualquier otra propiedad de la celda.mi entorno de desarrollo es
las respuestas anteriores no funcionan completamente para mí
después de intentarlo, mi solución que finalmente funciona es:
y el efecto es:
fuente
Establecer
separatorInset.right = .greatestFiniteMagnitude
en tu celular.fuente
awakeFromNib
activar esto puede hacer que toda la pantalla parpadeeapplicationDidBecomeActive
En Swift 3, Swift 4 y Swift 5 , puede escribir una extensión para UITableViewCell de esta manera:
Luego puede usar esto de la siguiente manera (cuando la celda es su instancia de celda):
Es realmente mejor asignar el ancho de la celda de vista de tabla como el recuadro izquierdo en lugar de asignarle un número aleatorio. Porque en algunas dimensiones de la pantalla, tal vez no ahora, pero en el futuro sus separadores aún pueden ser visibles porque ese número aleatorio puede no ser suficiente. Además, en iPad en modo horizontal no puede garantizar que sus separadores siempre serán invisibles.
fuente
Mejor solución para iOS 7 y 8
Si su aplicación es giratoria, use 3000.0f para la constante de inserción izquierda o calcule sobre la marcha. Si intenta configurar el recuadro derecho, tiene una parte visible del separador en el lado izquierdo de la celda en iOS 8.
fuente
En iOS 7, el separador de celdas de estilo agrupado UITableView se ve un poco diferente. Se parece un poco a esto:
Intenté la respuesta de Kemenaran de hacer esto:
Sin embargo, eso no parece funcionar para mí. No estoy seguro de por qué. Así que decidí usar la respuesta de Hiren , pero usando en
UIView
lugar deUIImageView
y dibujando la línea en el estilo iOS 7:Si usa esto, asegúrese de conectar la altura de vista de tabla correcta en la segunda instrucción if. Espero que esto sea útil para alguien.
fuente
En su subclase UITableViewCell, anule layoutSubviews y oculte _UITableViewCellSeparatorView. Funciona bajo iOS 10.
fuente
No creo que este enfoque funcione bajo ninguna circunstancia con celdas dinámicas ...
No importa en qué método de vista de tabla lo haga para las celdas dinámicas, la celda en la que cambió la propiedad del recuadro siempre tendrá la propiedad del recuadro establecida ahora cada vez que se elimine, causando un alboroto de separadores de líneas faltantes ... Eso es hasta que cámbialo tú mismo.
Algo como esto funcionó para mí:
De esa manera, actualiza su estado de estructura de datos en cada carga
fuente
En Swift con iOS 8.4 :
Nota: este fragmento anterior funcionará en UITableView usando celdas dinámicas. El único problema que puede encontrar es cuando usa celdas estáticas con categorías, un tipo de separador diferente a ninguno y un estilo agrupado para la vista de tabla. De hecho, en este caso particular no ocultará la última celda de cada categoría. Para superar eso, la solución que encontré fue establecer el separador de celdas (a través de IB) en ninguno y luego crear y agregar manualmente (a través del código) su vista de línea a cada celda. Por ejemplo, revise el fragmento a continuación:
fuente
Utilice esta subclase, el conjunto
separatorInset
no funciona para iOS 9.2.1, el contenido se exprimiría.https://gist.github.com/liruqi/9a5add4669e8d9cd3ee9
fuente
Lo mucho más simple y lógico es hacer esto:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section { return [[UIView alloc] initWithFrame:CGRectZero]; }
En la mayoría de los casos, no desea ver solo el último separador tableCiewCell. Y este enfoque elimina solo el último separador tableViewCell, y no necesita pensar en problemas de auto-distribución (es decir, dispositivo giratorio) o valores de código duro para configurar insertos separadores.
fuente
En
willdisplaycell
:fuente
Usando Swift 3 y adoptando el método de piratería más rápido, puede mejorar el código usando extensiones :
Luego, cuando configuras la celda:
fuente
fuente
La mejor manera de lograr esto es desactivar los separadores de línea predeterminados, la subclase
UITableViewCell
y agregar un separador de línea personalizado como una subvista decontentView
: vea a continuación una celda personalizada que se utiliza para presentar un objeto de tipoSNStock
que tiene dos propiedades de cadenaticker
yname
:Para desactivar el uso del separador de línea por defecto,
tableView.separatorStyle = UITableViewCellSeparatorStyle.None;
. El lado del consumidor es relativamente simple, vea el ejemplo a continuación:fuente
Para Swift 2:
agregue la siguiente línea a
viewDidLoad()
:fuente
Si la respuesta aceptada no funciona, puede intentar esto:
Es genial ;)
fuente
Pruebe el siguiente código, podría ayudarlo a resolver su problema
fuente
fuente
Debe tomar una celda personalizada y agregar Etiqueta y establecer restricciones, como que la etiqueta debe cubrir toda el área de la celda. y escribe la siguiente línea en constructor.
Establezca también el margen de diseño de UITableView de la siguiente manera
fuente
No pude ocultar el separador en una celda específica, excepto usar la siguiente solución
fuente
Para iOS7 y superior, la forma más limpia es usar INFINITY en lugar de un valor codificado. No tiene que preocuparse por actualizar la celda cuando la pantalla gira.
fuente
Como (muchos) otros han señalado, puede ocultar fácilmente todos los separadores UITableViewCell simplemente apagándolos para todo el UITableView; por ejemplo, en su UITableViewController
Desafortunadamente, es una verdadera PITA que hacer en una celda , que es lo que realmente está preguntando.
Personalmente, he probado numerosas permutaciones para cambiar el
cell.separatorInset.left
, nuevamente, como (muchos) otros han sugerido, pero el problema es, para citar a Apple (énfasis agregado):" ... Puede usar esta propiedad para agregar espacio entre el contenido de la celda actual y los bordes izquierdo y derecho de la tabla. Los valores de inserción positivos mueven el contenido de la celda y el separador de celda hacia adentro y lejos de los bordes de la tabla ... "
Entonces, si intenta 'ocultar' el separador empujándolo fuera de la pantalla hacia la derecha, también puede terminar sangrando el contenido de su celda también. Según lo sugerido por crifan, puede intentar compensar este desagradable efecto secundario configurando
cell.indentationWidth
ycell.indentationLevel
moviendo adecuadamente todo hacia atrás, pero he descubierto que esto tampoco es confiable (el contenido aún se sangra ...).La forma más confiable que he encontrado es
layoutSubviews
anular en una simple subclase UITableViewCell y establecer el recuadro derecho para que golpee el recuadro izquierdo, haciendo que el separador tenga un ancho 0 y tan invisible [esto debe hacerse en layoutSubviews para automáticamente manejar rotaciones]. También agrego un método de conveniencia a mi subclase para activar esto.Advertencia: no hay una forma confiable de restaurar el recuadro derecho original , por lo que no puede 'des-ocultar' el separador, por lo tanto, estoy usando un
hideSeparator
método irreversible (en lugar de exponer separatorIsHidden). Tenga en cuenta que el separatorInset persiste en las celdas reutilizadas, por lo que, debido a que no puede 'des-ocultar', debe mantener estas celdas separadoras ocultas aisladas en su propio reuseIdentifier.fuente
Mi requisito era ocultar el separador entre la cuarta y la quinta celda. Lo logré por
fuente
Rápido:
C objetivo:
fuente
Dentro de la clase de celda tableview. pon estas linea de codigo
fuente
En iOS9 tuve el problema de que cambiar las inserciones del separador también afecta el posicionamiento de la etiqueta text- and detailLabel.
Lo resolví con esto
fuente