iphone - guia - qgis manual
Espacio en blanco antes de la línea de separación en mi TableView (8)
Tengo una pregunta sobre UITableView ... Tengo un UITableViewController y he creado una celda personalizada. Cuando visualizo TableView, veo un pequeño espacio en blanco antes de la línea de separación, como puede ver en esta captura de pantalla:
¿Por qué? Es una visualización predeterminada? ¿Puedo cambiar algo para eliminar este relleno izquierdo blanco?
Rápido
cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0)
if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){
cell.layoutMargins = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
}
Este funcionó para mí
Gracias
¡No hay espacio en blanco! Ingresé un error en esto, Apple lo cerró como "no es un error", pero me dijo por qué no es un error. Escribí un proyecto simple que establece un color para cada vista posible en la aplicación. Lo que veo es que el color de esos píxeles es en realidad el color de fondo de la propia celda (¡no el contentsView!), Tal como me lo había dicho Apple.
Cell.contentView.backgroundColor es verde y el color cell.background es rojo (tomado con Pixie):
Al final, sin un separador, cell.contentView llena la celda por completo. Con un separador, hay un espacio de píxeles o dos en la parte inferior. El separador, cuando está insertado, ocupa la mayor parte de la brecha, pero luego se ven algunos píxeles de la celda.
¡Misterio resuelto!
EDITAR: parece que dependiendo de cómo configure su Storyboard, que el contentView.backgroundColor se "pierde" o se establece en blanco. Si lo montas en exceso al suministrar células, puedes obtener el comportamiento que deseas:
let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell
cell.backgroundColor = UIColor.redColor()
cell.contentView.backgroundColor = UIColor.greenColor()
Alternativamente, también puede editar esto en el constructor de interfaz (IB):
- Ir a IB.
- Seleccione la vista de tabla.
- Abra "Attribute Inspector" a la derecha.
- Cambie "Injertos de separador" de Predeterminado a Personalizado.
- Cambie el atributo "Izquierda" de 15 a 0.
Esto tiene el mismo efecto que la respuesta de @ Ashok, pero no requiere escribir ningún código.
La actualización funciona en iOS 7 y 8
La actualización funciona en iOS 9
Aquí hay una extensión de UITableViewCell Class para swift 3 y posterior
extension UITableViewCell
{
func removeSeparatorLeftPadding() -> Void
{
if self.responds(to: #selector(setter: separatorInset)) // Safety check
{
self.separatorInset = UIEdgeInsets.zero
}
if self.responds(to: #selector(setter: layoutMargins)) // Safety check
{
self.layoutMargins = UIEdgeInsets.zero
}
}
}
Uso:
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "menuCellID")!
// .. Your other code
cell.removeSeparatorLeftPadding()
return cell
}
¡Espero que esto ayude a alguien!
Naresh.
El espacio en blanco inicial se proporciona de forma predeterminada en iOS 7, incluso para las celdas personalizadas.
Verifique este separatorInset
de propiedadesInserción de UITableviewCell para eliminar / agregar espacios en blanco en los extremos del separador de líneas de la celda.
// Eliminar el espacio en blanco
cell.separatorInset = UIEdgeInsetsZero;
Alternativamente, a nivel de UITableView, puede usar esta propiedad:
if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { // Safety check for below iOS 7
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
Actualización: el código siguiente funciona en iOS 7 e iOS 8:
-(void)viewDidLayoutSubviews
{
if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {
[self.tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([self.tableView respondsToSelector:@selector(setLayoutMargins:)]) {
[self.tableView setLayoutMargins:UIEdgeInsetsZero];
}
}
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}
Esto hizo el truco para mí:
cell?.layoutMargins = UIEdgeInsetsZero;
cell?.preservesSuperviewLayoutMargins = false
Para aquellos de ustedes que quieran retener el UIEdgeInsetSettings en Swift y no están usando Storyboards:
Antes: (Comportamiento predeterminado)
Agregue el siguiente código:
tableView.separatorInset.right = tableView.separatorInset.left
Use el código siguiente para eliminar el relleno indeseado en UITableView. Funciona tanto en iOS 8 como en 7
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([tableView respondsToSelector:@selector(setSeparatorInset:)])
{
[tableView setSeparatorInset:UIEdgeInsetsZero];
}
if ([tableView respondsToSelector:@selector(setLayoutMargins:)])
{
[tableView setLayoutMargins:UIEdgeInsetsZero];
}
if ([cell respondsToSelector:@selector(setLayoutMargins:)])
{
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}