Así que tengo el código, en el que se haya podido trabajar en iOS 7.0, pero no en 7.1. Tengo una simple formato tableview, con el código:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return 10;
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 70.0;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
for (UIView *view in cell.contentView.subviews) {
[view removeFromSuperview];
}
UILabel *label = [[UILabel alloc] init];
label.text = [NSString string];
for (NSInteger i = 0; i < 20; i++) {
label.text = [label.text stringByAppendingString:@"label String "];
}
label.translatesAutoresizingMaskIntoConstraints = NO;
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWorldWrapping;
//label.lineBreakMode = NSLineBreakByTruncatingTail; //I have tried this too
[cell.contentView addSubview:label];
NSDictionary *dict = NSDictionaryOfVariableBindings(label);
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[label]-8-|" options:0 metrics:nil views:dict]];
[cell.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[label]" options:0 metrics:nil views:dict]];
if (indexPath.row == 0) {
label.textColor = [UIColor colorWithRed:1.0 green:0 blue:0 alpha:1.0];
}
else if (indexPath.row == 1) {
label.textColor = [UIColor colorWithRed:0 green:1.0 blue:0 alpha:1.0];
}
else if (indexPath.row == 2) {
label.textColor = [UIColor colorWithRed:0 green:0 blue:1.0 alpha:1.0];
}
else {
label.textColor = [UIColor colorWithWhite:0.3 alpha:1.0];
}
cell.backgroundColor = [UIColor colorWithWhite:1.0 alpha:1.0];
return cell;
}

He 1section con 10rows. Con cada fila reutilizados puedo eliminar todas las subvistas de contentView(he intentado alloc-init UITableViewCell, sino que vino con los mismos resultados).

En iOS 7.0, UILabel sólo se muestra en la celda a la que pertenece. Pero en 7.1 UILabel continúa desplegando a través de otra de las células. Lo que es interesante, que cuando hago clic en la celda, es dejar de ser overlaping por la vida, pero sólo hasta que haga clic en la celda anterior.
Mi pregunta es, ¿cómo hacer que funcione en 7.1 dispositivos como en 7.0 queridos.

He intentado tanto, simulador y el dispositivo y eché un vistazo a iOS 7.1 de la API de Diffs, pero no encontré nada relacionado con esto.

Tal vez es cuestión de Diseño Automático, que he variable altura de UILabel, pero necesito hacerlo. Quiero tener todo el texto en UILabel, pero mostrar sólo una parte de UILabel, que se pueden mostrar en una celda, que es el comportamiento predeterminado en la versión 7.0, pero 7.1 cambia esto y no sé por qué ¿por qué y cómo tratar con él.

Esta es la carpeta de dropbox para imágenes con explicación detallada: Carpeta con imágenes

Actualización: he intentado cosas como tese, pero nada funcionó para mí.

cell.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 70);
cell.contentView.frame = CGRectMake(0, 0, self.tableView.frame.size.width, 70);
cell.opaque = NO;
cell.contentView.opaque = NO;
cell.clearsContextBeforeDrawing = NO;
cell.contentView.clearsContextBeforeDrawing = NO;
cell.clipsToBounds = NO;
cell.contentView.clipsToBounds = NO;

6 Comentarios

  1. 62

    El problema tiene que ver con la altura de su celular. No va a ajustar dinámicamente para usted.

    Usted probablemente notará que a medida que se desplaza y la vista se va fuera de la vista de la superposición de texto desaparecerá con ella.

    Si usted quiere que su texto clip a una cierta altura, entonces usted necesita para configurar el número de líneas, en lugar de ponerlo a 0, ya que le permitirá continuar para siempre.

    La lineBreakMode no tomará efecto, ya que no está detenido.

    Opcionalmente se podría tratar de establecer el recorte en el contentView para asegurarse de que todas las subvistas permanecer en el interior.

    Dependiendo del resultado final que usted desea, usted podría hacer la dinámica de las alturas y el cambio basado en el contenido. Hay un montón de PARA preguntas relacionadas a hacer esto.

    Actualización de recorte de la contentView

    Tengo que probarlo yo mismo, pero en lugar de eso, aquí hay un par de enlaces relacionados con el recorte de las contentView:

    Se ve como funciona esto:

    cell.clipsToBounds = YES;
    • Me di cuenta de desaparecer de texto mientras se desplaza y cuando me desplaza hacia arriba se veía bien(como 7.0). Me puede fijar el número de líneas, pero se tarda sólo efecto en UILabel, y cuando he UIButton a continuación UILabel, botón continúa la superposición de las células. Así que quiero que la solución más general. Simplemente quiero que todo debajo de área visible a no ser visible => estática de la altura de la fila 70. Estoy confundido ¿por qué sucede solo en iOS 7.1 se Puede explicar » no va a ajustar dinámicamente por usted.» como yo no quiero que sea dinámico, quiero células que tienen la altura estática de los 70.
    • A la derecha, si usted quiere tener la altura estática de 70, entonces usted no necesita dinámica alturas. Usted querrá asegurarse de que la vista de los clips de las subvistas. No estoy seguro de por qué 7.0 trabajado vs 7.1, yo he tenido problemas similares en las versiones anteriores. Voy a añadir algunos enlaces a mi respuesta al respecto.
    • Después de todo he encontrado la solución: la célula.clipsToBounds = SÍ; esto soluciona mi Problema y es bien aparece en 7.0 y 7.1. Confundido ¿por qué no lo he encontrado en la Documentación que ahora es necceary, si quieres hacerlo como yo. Como estoy leyendo tu comentario ahora, he encontrado que se menciona, así que usted puede hacer responder a una voy a marcar como aceptado o voy a hacer mi ujo.
    • Me alegro de que usted lo imaginé. He actualizado la respuesta.
    • Si usted está construyendo su celda en el interface builder el Clip de Subvistas en la celda de sí mismo (la parte superior de los tres) tiene el mismo efecto..
    • Para mí, esto parece ser un problema con iOS 7.1, pero no 7.0, que versión funciona bien. Pero supongo que el recorte se activa automáticamente para la 7.0.
    • Perfecto tio.. Solucionado mi problema & Salvó mi día.. muchas Gracias.
    • de la célula.clipsToBounds = SÍ solucionado mi problema, gracias RyanJM!!
    • pasó horas tratando de resolver este problema. Esto finalmente se resolvió. Muchas gracias Ryan

  2. 6

    Aquí es la solución Perfecta de la Superposición de contenido en las Células.

    Sólo utilizar a continuación el código en cellForRowAtIndexPath después de la asignación de celular y antes de la adición de subvistas.

    for (id object in cell.contentView.subviews)
    {
    [object removeFromSuperview];
    }  

    Realidad de la superposición se produce porque cada vez que se desplaza el formato tableview su asignación de agregados ver una y otra vez. Por lo anterior código va a resolver su problema mediante la eliminación de los puntos de vista existentes de la célula contentView.

    Ahora Usted puede ver la memoria de la sesión de depuración después de aplicar el código anterior, la memoria es estable en este momento.

    Espero que te ayude.

    Gracias !

    • Este no era mi problema. Usted está describiendo una situación en la vista actual de cell0 se superpone a la vista anterior de cell0. Pero el problema era que la vista actual de cell0 superpuesta punto de vista actual de celda1. Además tengo que hacer ya tienen este código donde se recomienda (aunque ahora prefiero ponerlo en prepareForReuse método).
  3. 1

    Este es el problema con la recreación del contenido de la celda. Pruebe con el siguiente segmento de código.

    for(UIView *view in cell.contentView.subviews){  
    if ([view isKindOfClass:[UIView class]]) {  
    [view removeFromSuperview];   
    }
    }
    • cuando escribo este código, las células de la muestra, pero el código no quitar las viejas células creo. porque veo los viejos valores por debajo de la nueva celda
    • se puede comprobar esto: stackoverflow.com/questions/27355545/…
  4. 1

    @Gaurav su respuesta debe ser aceptada respuesta. Gracias!

    for object in cell.contentView.subviews
    {
    object.removeFromSuperview();
    }
    • Me alegro de que mis respuestas ayudado !
  5. 1

    tenido un comportamiento similar en iOS 8, el uso de guión gráfico /IB.

    solución fue agregar un Bottom Space to: Superview restricción de la parte más inferior de la vista a la parte inferior del prototipo de celda de Vista del Contenido. Los otros puntos de vista y las restricciones de todo anclado en la parte superior.

  6. 0

    Que están utilizando los storyboards?
    Si es así, seleccione la tabla en la vista controlador en storyboards y desactive la casilla «Bajo fondo bares»
    También puede hacer esto mediante programación.

    Si su TVC hereda de un nav vista controlador o una vista de la pestaña controlador, puede que tenga que desactivar esta opción de diseño en la vista principal en lugar

    • Traté de él, pero no parece hacer nada. Sí, yo soy el uso de Storyboards y mi TableViewController pertenece a NavigationController. Yo sin marcar en ambos, pero no pasó nada.
    • Ah, otra cosa que podrías probar es limpiar el código dentro de cellForRowAtIndexPath. Me he dado cuenta de que si pones bucles o algo de lógica en el interior de este código, las cosas se ponen un poco raro. Para: mover el bucle exterior (crear un array o algo más para leer más tarde), y posiblemente cambiar el if/else para una instrucción switch y ver si ayuda
    • Trató de ambos, pero nada ayudó. Después de todo he encontrado la solución: la célula.clipsToBounds = SÍ; esto soluciona mi Problema y es bien aparece en 7.0 y 7.1. Confundido ¿por qué no lo he encontrado en la Documentación que ahora es necesario, si quieres hacerlo como yo. Voy a publicar la respuesta, pero hay que esperar.
    • Esto también trabajó para mí, la configuración de clipsToBounds = SÍ. Muy frustrante.

Dejar respuesta

Please enter your comment!
Please enter your name here