inside doesn ios xcode uiscrollview interface-builder xcode-storyboard

ios - doesn - uiscrollview swift programmatically



UIScrollView niño saltando después de UINavigationController push y pop (3)

Obtenga el marco de la subvista antes de que desaparezca y luego restablezca manualmente el marco de la subvista cada vez que aparezca la vista en - (void) viewWillAppear: (BOOL) animado.

-(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; globalFrameVariable = subview.frame; [subview removeFromSuperview]; } -(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [subview setFrame:globalFrameVariable]; [scrollView addSubview:subview]; }

Así que tengo un UIScrollView en mi aplicación para iPad con una sola vista hija (que a su vez es principal para todos los controles). El desplazamiento funciona bien en él. La rotación funciona bien (toda la vista se adapta al retrato, se desplaza por el paisaje). Una vez que presiona una nueva pantalla en el UINavigationController , y luego regresa, la rompe.

Parece que el marco del elemento secundario de la vista de desplazamiento se ha movido hacia arriba, en relación con la posición de desplazamiento, pero la vista de desplazamiento se ha quedado en la parte inferior (toda la vista de elementos secundarios se ha desplazado hacia arriba).

Intenté luchar contra las Constraints en el guión gráfico, literalmente durante horas, y no puedo entender qué podría estar causando esto.


Tuve el mismo problema con la vista de desplazamiento y los diseños automáticos (iOS 6: no funciona, iOS 7: funciona bien), por supuesto, esta no es la solución perfecta, pero parece que funciona. Espero que te ayude:

- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self performSelector:@selector(content) withObject:nil afterDelay:0.0]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; offset = self.scrollView.contentOffset; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; self.scrollView.contentOffset = CGPointZero; } - (void)content { [self.scrollView setContentOffset:offset animated:NO]; }


Aquí hay una solución simple que encontré. (Suponiendo que la vista padre se supone que abarca todo el tamaño del contenido) Use esta subclase de UIScrollView:

@interface BugFixScrollView : UIScrollView @end @implementation BugFixScrollView -(void)layoutSubviews { [super layoutSubviews]; UIView *view=[self.subviews firstObject]; if(view) { CGRect rect=view.frame; rect.origin=CGPointMake(0, 0); view.frame=rect; } } @end

Simplemente restablece el origen cada vez que el diseño automático lo arruina. esta clase se puede usar en InterfaceBuilder simplemente cambiando el nombre de clase después de colocar UIScrollView.