Eliminar SeparatorInset en iOS 8 UITableView para XCode 6 iPhone Simulator

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

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

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

Adjunté la captura de pantalla a continuación:

iPhone 6 Simulator espacio blanco extraño en tableview

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

Gracias, Estudiante, por haberme dirigido a la dirección correcta con el comentario " Prueba este 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) Declanetworking In UIView.h Reference UIView Class Reference 

introduzca la descripción de la imagen aquí

A continuación se muestra la respuesta correcta para resolver este extraño espacio en blanco al configurar el tableview layoutMargins y 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]; } } 

Mira la captura de pantalla a continuación:

introduzca la descripción de la imagen aquí

Intente crear una categoría de class UITableViewCell y agregue este getter

 - (UIEdgeInsets)layoutMargins { return UIEdgeInsetsZero; } 

en iOS7 esto no se llamará porque no hay esta propiedad en el SDK, y no causará ningún locking; en iOS8 esto 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 presenta un nuevo concepto denominado Configurar márgenes de contenido , también se presenta una nueva propiedad denominada layoutMargins , para conocer 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 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 ; } } 

Al hacer esto, se 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; } } 

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 list desplegable del separador de las inserciones pnetworkingeterminadas a las inserciones personalizadas . Cambia la inserción de la izquierda de 15 a 0.

introduzca la descripción de la imagen aquí

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 la vistaDidLoad:

 [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 la inserción del separador tal como está, simplemente establezca cell.backgroundColor en tableView backgroundColor. Simplemente configurar el cell.contentView.backgroundColor no hace que el problema desaparezca.

He intentado de muchas maneras, ninguno funciona, pero este funciona para mí.

TRABAJA PARA MI

Para hacer que sus separadores UITableView sean cero para iOS7 e iOS8, en lugar de hacer un cambio en el código, realice un cambio en el xib para UITableView cambiando Ver-> Modo-> Relleno de aspecto.

Agregue imágenes de inicio para iPhone 6 y Plus. Antes de agregar las imágenes, el teléfono se está ejecutando en modo escalado, es decir, las aplicaciones más antiguas se ajustan 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) 1242×2208 y Retina HD 4.7 (iPhone6) 750×1334.

Ver la inserción del separador UITableView de iOS 8 0 que no funciona

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

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