Eliminar SeparatorInset en iOS 8 UITableView para XCode 6 iPhone Simulator

Encontré un espacio en blanco extraño en UITableView para iPhone 6 Simulator (iOS 8) en XCode 6 GM. Intenté establecer SeparatorInset tanto en el guión gráfico como en el código, pero el espacio en blanco está ahí.

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]; } } 

Adjunté una captura de pantalla a continuación:

simulador de iPhone 6 extraño espacio blanco en tableview

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

Gracias, Estudiante, por indicarme la dirección correcta con el comentario ” Prueba 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 

enter image description here

A continuación se muestra la respuesta correcta para resolver este extraño espacio en blanco estableciendo el tableview layoutMargins y cell layoutMargins como UIEdgeInsetsZero si existe (para iOS 8). Y no se bloqueará en iOS 7 también.

 -(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:-

enter image description here

Intenta crear una categoría de clase UITableViewCell y agrega este getter

 - (UIEdgeInsets)layoutMargins { return UIEdgeInsetsZero; } 

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

Esto funciona para mi

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; } 

IOS8 introduce un nuevo concepto llamado Configurando Márgenes de Contenido , también se presenta una nueva propiedad llamada layoutMargins , para los detalles de la propiedad, consulte el Apple Doc. El tipo de layoutMargins es UIEdgeInsets , por defecto el valor es {8,8,8,8}. Para eliminar la línea separadora de TableView en IOS8, además de establecer tableView.seperatorInset = UIEdgeInsetsZero , también debe hacer lo siguiente:

Primero define 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 del separador. También puedes 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; } } 

En mi caso en Xcode 6.2, además de la respuesta de Will Q, tengo que ir a Main.storyboard> select the UITableViewCell> Attributes Inspector. Cambiar la lista desplegable Separador de Incrustos predeterminados a Incrustos personalizados . Cambie el recuadro de la izquierda de 15 a 0.

enter image description here

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); } 

En iOS8, debe establecer el recuadro tanto en la fila como en el nivel de la 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.

para iOS 8

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

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

Lo intenté de muchas maneras, ninguna funciona, pero esta funciona para mí.

TRABAJA PARA MI

Agregue imágenes de inicio para iPhone 6 y Plus. Antes de que se agreguen las imágenes, el teléfono se está ejecutando en modo de escalado, es decir, las aplicaciones antiguas se ajustan a los nuevos tamaños de pantalla. Esto puede estar causando las líneas. Las nuevas imágenes son Retina HD 5.5 (iPhone6Plus) 1242×2208 y Retina HD 4.7 (iPhone6) 750×1334.

Ver iOS 8 UITableView separator inset 0 no funciona

Básicamente, debe establecer tanto el archivo cell.layoutMargin como el layoutMargin de tableView. YMMV, pero tuve que configurar la vista de tabla en layoutSubviews antes de que funcionara.

Para hacer que su separador UITableView se ponga en cero para iOS7 e iOS8, en lugar de realizar un cambio en el código, realice un cambio en el xib para UITableView cambiando la Vista-> Modo-> Relleno de aspecto.

Tengo UITableView estático y quería cambiar el margen de un separador de células 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) } }