Tengo una pregunta acerca de UITableView…
Tengo un UITableViewController y he creado una costumbre de la célula.
Cuando visualizo el formato tableview veo un poco de espacio en blanco antes de la línea de separación como se puede ver en esta captura de pantalla:

Espacio en blanco antes de la línea de separación en mi en formato tableview

¿Por qué? Es un defecto visualizar?
Puedo cambiar algo para quitar esta en blanco a la izquierda de relleno?

  • Se hace por el diseño. Echa un vistazo a la de iOS 7 aplicación de Notas para ver en sus aplicaciones. Estoy de acuerdo en que es muy molesto 🙂
  • [Consulte esta solución para iOS 8][1] [1]: stackoverflow.com/a/25788003/4014757
  • [Esta solución funciona en iOS 8][1] [1]: stackoverflow.com/a/25788003/4014757
  • Si usted se preocupa por esto, entrar en una mejora «bug» en el bug reporter. Acabo de hacer.
  • Apple acaba de volver a mí – esto no es un bug, es un gran malentendido acerca de cómo configurar el color. El color de los píxeles a la izquierda del separador son en realidad parte de la célula color de fondo (NO el de la celda.contentsView). Ver a mi nueva respuesta.
InformationsquelleAutor Safari | 2013-10-21

8 Comentarios

  1. 89

    Los principales espacios en blanco se proporciona por defecto en iOS 7, incluso para la costumbre de las células.

    Checkout esta propiedad separatorInset de UITableviewCell para quitar/agregar espacios en blanco en los dos extremos de la célula del separador de línea.

    //Quitar el espacio en blanco

    cell.separatorInset = UIEdgeInsetsZero;

    Alternativamente, en UITableView nivel, puede utilizar esta propiedad –

    if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) {  //Safety check for below iOS 7 
        [tableView setSeparatorInset:UIEdgeInsetsZero];
    }

    Actualización – a Continuación el código funciona en iOS 7 y 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];
        }
    }
    • Muchas gracias @Ashok
    • no trabajo para xcode 6.0.1
    • gracias por señalar. Ahora he actualizado la respuesta anterior para trabajar con el recientemente lanzado iOS 8 sdk / Xcode 6.
    • no hay ningún espacio en blanco – ver mi respuesta.
    • Esto se puede aplicar directamente a la tabla completa como esta el auto.formato tableview.separatorInset = UIEdgeInsetsZero;
    • Sólo una nota que todo el formato tableview solución de este se moverá también los encabezados de sección en consecuencia.

  2. 33

    Alternativamente, también puede editar esta en el interface builder (IB):

    1. Ir a IB.
    2. Seleccione La Vista De Tabla.
    3. Abrir el Atributo «Inspector» en la derecha.
    4. Cambio «Separador de Márgenes» de forma Predeterminada Personalizada.
    5. Cambio de la «Izquierda» en el atributo de 15 a 0.

    Esto tiene el mismo efecto que @Ashok la respuesta, pero no es necesario escribir ningún código.

    Actualización Funciona en iOS 7 y 8

    Actualización Funciona en iOS 9

    • Esto de alguna manera no me funciona, parece un error
    • Funciona tanto para iOS 7 & 8
    • sí, he actualizado mi respuesta. Gracias.
    • No funciona. Votada abajo.
    • Esto funciona en Xcode 7, iOS 9. Upvoted. Esta es una solución de limpieza que hacerlo por código.
    • Pero véase también la respuesta de stackoverflow.com/a/25877725/3681880
    • Esta solución no funciona para la estática de la vista de tabla de la célula
    • no me funciona en el caso de celdas personalizado, iOS 9
    • Esto no funciona. Específicamente se deja 3 o 4 pts/economatos de espacio en el margen izquierdo.

  3. 16

    Utilizar a continuación el código para quitar el relleno no deseado en UITableView. Funciona tanto en IOS 8 & 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];
        }
    }
    • Es interesante que esta trabajado para mí, mientras que las otras sugerencias no.
    • Funciona como un encanto….gracias
    • Todas las otras respuestas en este hilo no trabajo pero este hace el truco! Creo que lo que la mayoría de los otros código necesario respuestas falta es que esta respuesta setLayoutMargins incluso en las Células también! 🙂 Saludos!
    • Gracias por que su trabajo muy bien..!!
  4. 10

    Hay ningún espacio en blanco! Me entró un error en esto, Apple acaba de cerrar es como «un error», pero me dijo que por qué no un error. Escribí un proyecto simple que establece un color para cada posible ver en la aplicación. Lo que yo veo es que el color de los píxeles es en realidad el color de fondo de la celda (no la de la contentsView!), así como Apple me había dicho.

    De la célula.contentView.backgroundColor es verde, y el celular.el color de fondo es rojo (tomada con Pixie):

    Espacio en blanco antes de la línea de separación en mi en formato tableview

    Al final, sin un separador, el celular.contentView llena la celda completamente. Con un separador, hay un píxel o dos brecha en la parte inferior. El separador, al margen, llena la mayor parte de la brecha, pero hay, a continuación, algunos píxeles de la celda que muestra a través.

    Misterio resuelto!

    EDIT: parece que dependiendo de cómo configure su Guión, que la contentView.backgroundColor se «pierde» o del conjunto Blanco. Si el exceso de paseo cuando el suministro de células se puede obtener el comportamiento de su deseo:

        let cell = tableView.dequeueReusableCellWithIdentifier("FOO", forIndexPath: indexPath) as UITableViewCell
    
        cell.backgroundColor = UIColor.redColor()
        cell.contentView.backgroundColor = UIColor.greenColor()
    • La misma experiencia! ¿cuál es el radar #?
    • Solución temporal es poner el color de celda de la misma como la contentView, que solucionarlo para el iphone, pero aún ve un 1 px separador al final en el ipad.
    • ¿por qué desea ver el número de error. En la final fue cerrado como «un error», puesto que los píxeles son los de la vista (de la célula.backgroundColor) que usted tiene control sobre. Que sean claros, entonces hacer el mismo color que el contenido de la vista, su todo su elección!
    • por alguna razón, yo también de estilo del fondo de la celda para que coincida con el fondo de la contentView, y esta línea blanca todavía se muestra en el iPad (pero no en el iPhone).
    • dices que no funciona – ¿intenta subidos proyecto que se hace referencia en mi respuesta? Su un iPad proyecto. Me encontré en mi propio iPad y ¿adivinen qué – la línea es de color rojo como la captura de arriba. Descargar y pruébelo usted mismo. jugar con los colores de la vista.
  5. 9

    Swift

    cell.separatorInset = UIEdgeInsetsMake(0, 0, cell.frame.size.width, 0)
    if (cell.respondsToSelector("preservesSuperviewLayoutMargins")){
            cell.layoutMargins = UIEdgeInsetsZero
            cell.preservesSuperviewLayoutMargins = false
       }

    Este trabajó para mí

    Gracias

  6. 7

    Esto hizo que el truco para mí:

    cell?.layoutMargins = UIEdgeInsetsZero;
    cell?.preservesSuperviewLayoutMargins = false
    • Esto funcionó para mí.
    • Esto en adición a michaelavila sugerencia resuelto para mí…
  7. 5

    Para aquellos de ustedes que quieren hacer el retener la UIEdgeInsetSettings en Swift y no el uso de Storyboards:

    Antes: (Comportamiento Predeterminado)

    Espacio en blanco antes de la línea de separación en mi en formato tableview

    Agregue el código siguiente:

    tableView.separatorInset.right = tableView.separatorInset.left

    Espacio en blanco antes de la línea de separación en mi en formato tableview

    • No se puede asignar a la derecha o a la izquierda de la propiedad en seperatorInset directamente, pero como todo
    • Sí, usted puede
    • vea si usted puede compilar con self.tableView.separatorInset.right = 0;
    • Funciona. compruebe su código.
    • esto funcionó para mí.
  8. 0

    Aquí es una extensión para UITableViewCell Clase para swift 3 & más tarde

    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 algunos uno!

    Naresh.

Dejar respuesta

Please enter your comment!
Please enter your name here