ios iphone uitableview ios8 xcode6

Eliminar SeparatorInset en iOS 8 UITableView para Xcode 6 iPhone Simulator



ios8 xcode6 (15)

Agregue imágenes de inicio para iPhone 6 y Plus. Antes de agregar las imágenes, el teléfono se está ejecutando en modo de escala, es decir, las aplicaciones más antiguas se escalan para adaptarse a los nuevos tamaños de pantalla. Esto puede estar causando las líneas. Las nuevas imágenes son Retina HD 5.5 (iPhone6Plus) 1242x2208 y Retina HD 4.7 (iPhone6) 750x1334.

Encontré un espacio en blanco extraño en UITableView para iPhone 6 Simulator (iOS 8) en Xcode 6 GM. Intenté configurar SeparatorInset desde el guión gráfico y también el código, pero el espacio en blanco es hasta allí.

El siguiente código funciona en iOS 7 pero no en iOS 8 (simulador de iPhone 6).

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{ if ([tableView respondsToSelector:@selector(setSeparatorInset:)]) { [tableView setSeparatorInset:UIEdgeInsetsZero]; } }

Adjunto captura de pantalla a continuación:

Estoy usando AutoLayout por cierto. Espero que alguien pueda mostrarme una forma de eliminar el extraño espacio en blanco en TableView .


En iOS8, debe configurar el recuadro tanto en el nivel de fila como en el de tabla.

Nivel de fila en cellForRowAtIndexPath:

if ([cell respondsToSelector:@selector(preservesSuperviewLayoutMargins)]){ cell.layoutMargins = UIEdgeInsetsZero; cell.preservesSuperviewLayoutMargins = false; }

Nivel de tabla en viewDidLoad:

[tableReference setSeparatorInset:UIEdgeInsetsZero];

Después de eso, es una buena idea LIMPIAR su proyecto. En algunas ocasiones, noté que estos cambios no se introdujeron directamente en la aplicación ejecutable en el simulador.


En mi caso en Xcode 6.2, además de la respuesta de Will Q, tengo que ir a Main.storyboard> seleccionar UITableViewCell> Attributes Inspector. Cambie la lista desplegable Separador de Inserciones predeterminadas a Inserciones personalizadas . Cambie el recuadro izquierdo de 15 a 0.


Gracias Estudiante por señalarme en la dirección correcta con el comentario " Pruebe esto self.myTableView.layoutMargins = UIEdgeInsetsZero ;" Esta línea de código solo funcionará en iOS 8 porque layoutMargins solo está disponible desde iOS 8. Si ejecuto el mismo código en iOS 7, se bloqueará.

@property(nonatomic) UIEdgeInsets layoutMargins Description The default spacing to use when laying out content in the view. Availability iOS (8.0 and later) Declared In UIView.h Reference UIView Class Reference

A continuación se muestra la respuesta correcta para resolver este extraño espacio en blanco configurando los tableview layoutMargins y los tableview layoutMargins cell layoutMargins como UIEdgeInsetsZero si existe (para iOS 8). Y tampoco se bloqueará en iOS 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]; } }

Vea la captura de pantalla a continuación:-


IOS8 presenta un nuevo concepto llamado Configuración de márgenes de contenido , también se presenta una nueva propiedad llamada layoutMargins , para obtener detalles de la propiedad, consulte el documento de Apple. El tipo de layoutMargins es UIEdgeInsets , por defecto el valor es {8,8,8,8}. Para eliminar la línea de separación de TableView en IOS8, además de establecer tableView.seperatorInset = UIEdgeInsetsZero , también debe hacer lo siguiente:

Primero defina la macro

#define isIOS8SystemVersion (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1)

En el método UITableViewDelegate agregue:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *reuseId = @"cellReuseID" ; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId]; if(!cell){ cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseId]; if(isIOS8SystemVersion){ cell.layoutMargins = UIEdgeInsetsZero; cell.preservesSuperviewLayoutMargins =NO ; } }

Hacer esto eliminará la línea de separación. También puede hacer lo siguiente:

UITableView *tableView = [[UITableView alloc] init]; if(isIOS8SystemVersion){ tableView.layoutMargins = UIEdgeInsetsZero ; }

y en el método UITableViewDelegate agregue:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *reuseId = @"cellReuseID" ; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reuseId]; if(!cell){ cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:reuseId]; if(isIOS8SystemVersion){ cell.layoutMargins = UIEdgeInsetsZero; } }


Intente crear una categoría de clase UITableViewCell y agregue este captador

- (UIEdgeInsets)layoutMargins { return UIEdgeInsetsZero; }

en iOS7 esto no se llamará porque no hay esta propiedad en SDK, y no causará ningún bloqueo ; en iOS8 se llamará cada vez que use la celda

Esto funciona para mi


Lo he intentado de muchas maneras, ninguna de ellas funciona, pero esta me funciona.


Mi solución con solo tres líneas de código:

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)row{ // // ... your code ... // if ([cell respondsToSelector:@selector(preservesSuperviewLayoutMargins)]){ cell.layoutMargins = UIEdgeInsetsZero; cell.preservesSuperviewLayoutMargins = false; } return cell; }


Para hacer que sus separadores UITableView separen a cero tanto para iOS7 como para iOS8, en lugar de realizar un cambio en el código, realice un cambio en el xib para UITableView cambiando View-> Mode-> Aspect Fill.


Si desea eliminar la línea blanca, pero mantener el separador insertado tal como está, simplemente configure cell.backgroundColor en tableView backgroundColor. Solo configurar cell.contentView.backgroundColor no hace que el problema desaparezca.


Solo agregue lo siguiente:

tableView.separatorStyle = .none


Solución para iOS 7 y iOS 8

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { cell.separatorInset = UIEdgeInsetsMake(0.0f, cell.frame.size.width, 0.0f, 0.0f); }


Tengo UITableView estático y quería cambiar el margen de un separador de celdas al borde izquierdo.

Gracias a las respuestas anteriores, esta fue mi solución

override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { // needed to shift the margin a specific cell to the left edge if indexPath.section == 3 && indexPath.row == 0 { cell.layoutMargins = UIEdgeInsetsZero cell.preservesSuperviewLayoutMargins = false cell.separatorInset = UIEdgeInsetsMake(0.0, 0.0, 0.0, 0.0) } }



para iOS 8

intente estableciendo cell.layoutMargins = UIEdgeInsetsZero; en el método cellForRowAtIndexPath