objective c - Problema de animación de altura de cuadro de UITableView
objective-c iphone (8)
El mismo problema aquí también. Esto es lo que estoy haciendo y el origen se anima sin problemas, pero el tamaño cambia inmediatamente ... molesto.
[UIView beginAnimations:@"HideTabbar" context:nil];
[UIView setAnimationDuration:.3];
self.tableView.frame = CGRectMake(0.0, 44.0, 320, 366);
[UIView commitAnimations];
ACTUALIZACIÓN: intente agregar esto antes de la animación:
self.tableView.autoresizingMask = UIViewAutoresizingNone;
Si intento animar la altura del cuadro de una tableView
(ej: height -= 200
), las celdas que aparecen en los últimos 200 píxeles desaparecen repentinamente antes de que se complete la animación suave del cuadro.
Para asegurarme de que no estoy haciendo nada más, creé una nueva aplicación basada en vistas. En el viewController
principal, creo mi propia vista de tableview
con suficientes pseudo rows
para llenar toda la pantalla. Y en la selección de una fila hago una animación de altura simple.
código más relevante:
- (void)viewDidLoad {
[super viewDidLoad];
self.myTable = [[[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)] autorelease];
myTable.delegate = self;
myTable.dataSource = self;
[self.view addSubview:myTable];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
CGRect frame = self.myTable.frame;
frame.size.height = 200;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationDelay:.5f];
[UIView setAnimationDuration:0.5f];
self.myTable.frame = frame;
[UIView commitAnimations];
}
¿Alguien sabe por qué sucede esto, o qué solución / solución puede ser?
Cualquier sugerencia es realmente apreciada. TIA!
Encontré su pregunta mientras buscaba el método adecuado para cambiar el tamaño de un tableView. Creo que su problema está en su animación que ha especificado UIView
lugar de UITableView
. No pude duplicar tu problema usando UIView
o UITableView
, pero estoy usando SDK 3.1 y puede ser un error que se ha solucionado desde tu publicación. No estoy seguro, pero espero que esto ayude!
Es una vieja pregunta pero esto podría ayudar a alguien en el futuro;
tableview
un problema similar incrustando la tableview
de tableview
en una vista UIView
, y UIView
el tamaño de la vista UIView
lugar de la tableview
de tableview
. Establecí la altura de la tableview''s
en un valor grande y también la propiedad "subvistas de recorte" en UIView
. UIView
el tamaño del UIView
proporcional al contentSize de tableview. No es una buena solución pero funcionó para mis propósitos.
Esta es una pregunta antigua y ya hay un par de sugerencias para una solución, pero pensé en agregar la mía.
Terminé animando las propiedades contentInset
y scrollIndicatorInsets
, lo que da la ilusión de que la tabla en sí está scrollIndicatorInsets
tamaño.
Finalmente encontré la solución! De hecho, hay un error !! no use variables
, cuando anime la altura use [[UIScreen mainScreen] bounds]
. Me gusta esto:
[UIView animateWithDuration:0.5 animations:^{
tableView.frame=CGRectMake(0, 38, fullScreenRect.size.width, [[UIScreen mainScreen] bounds].size.height-38);
}];
no
[UIView animateWithDuration:0.5 animations:^{
tableView.frame=CGRectMake(0, 38, fullScreenRect.size.width, fullScreenRect.size.width-38);
}];
¡Y funcionará como magia!
No estoy seguro de tener exactamente el mismo problema, pero al usar [UIView setAnimationBeginsFromCurrentState:YES];
solucionó (partes de) las fallas (mi vista de tabla se deslizó alocadamente al animar un cambio de altura de marco).
Para cualquier persona que haga clic en esta pregunta y respuesta en el futuro, aquí se explica cómo utilizar la respuesta de @ ryyst en las animaciones basadas en bloques de UIView introducidas en iOS 4.
[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
// change frame etc here
} completion:^(BOOL finished) {
// any clean up here
}];
Tengo exactamente el mismo problema. Me imagino que las vistas de tabla tienen un comportamiento especial en "setFrame:", parece que la vista de tabla elimina las celdas que no serán visibles con el nuevo marco.
En el caso de una animación, las celdas no serán visibles solo al final de la animación, pero parece que a las vistas de tabla no les importa.
¡Si alguien tiene una mejor teoría, me encantaría escucharla!