estoy ajustando el estado de un controlador de vista de detalle, justo antes de que se empuja en una navigationController
:UIScrollView ajusta contentOffset cuando cambia contentSize
[self.detailViewController detailsForObject:someObject];
[self.navigationController pushViewController:self.detailViewController
animated:YES];
En el DetailViewController
un ScrollView reside. ¿Qué puedo cambiar el tamaño de contenido basada en el objeto pasado:
- (void)detailsForObject:(id)someObject {
// set some textView's content here
self.contentView.frame = <rect with new calculated size>;
self.scrollView.contentSize = self.contentView.frame.size;
self.scrollView.contentOffset = CGPointZero;
}
Ahora, todo esto funciona, pero el ScrollView ajusta es contentOffset
durante el navigationController deslizable en la animación. El contentOffset
se establecerá en la diferencia entre el último contentSize y el nuevo calculado. Esto significa que la segunda vez que abra detailsView, los detalles se desplazarán a alguna ubicación no deseada. Aunque configuro el contentOffset
en CGPointZero
explícitamente.
Encontré que restablecer el contentOffset
en - viewWillAppear
no tiene ningún efecto. Lo mejor que podía llegar a está restableciendo la contentOffset en viewDidAppear
, causando una notable movimiento ascendente y descendente del contenido:
- (void)viewDidAppear:(BOOL)animated {
self.scrollView.contentOffset = CGPointZero;
}
¿Hay una manera de prevenir una UIScrollView
de ajustar su contentOffset
cuando su contentSize
se cambia?
¿Por qué está ajustando el desplazamiento de contenido dentro de un bloque de animación? Omita las cosas de CATransaction, por lo que no se anima. Entonces no se verá entrecortado. – Andrew
Eliminar las cosas de CATransaction en realidad no cambia nada, por lo que se elimina. – Berik
¿Estás seguro de que se llama a viewDidAppear? Establecí un punto de interrupción o una declaración NSLog en él. Además, ¿ha intentado cambiar el orden de sus llamadas, es decir, establecer los detalles para Objeto después de presionar? – Andrew