restricciones recuerdo qué olvide hacer eliminar código como codigo borrar activar iphone objective-c uitableview ios7 uistatusbar

iphone - recuerdo - restricciones ios 12



No puedo hacer que scrollsToTop funcione en iOS7 (6)

¿Tiene más de una vista de desplazamiento / vista de tabla / vista de colección en pantalla? Si es así, solo uno de ellos puede tener scrollsToTop configurado en YES , de lo contrario, iOS7 no desplazará ninguno de ellos a la parte superior.

También puede implementar el método UIScrollViewDelegate scrollViewShouldScrollToTop: y devolver SÍ si la vista de desplazamiento pasada es igual a la que desea desplazarse hacia la parte superior:

- (BOOL) scrollViewShouldScrollToTop:(UIScrollView*) scrollView { if (scrollView == self.myTableView) { return YES; } else { return NO; } }

Estoy apuntando a iOS7 en mi última aplicación, y al tocar en la barra de estado no parece desplazar una tabla Vista o colección Vista hacia arriba.

He establecido self.tableView.scrollsToTop = true y todavía no pasa nada.

Sé que Apple cambió significativamente la barra de estado en iOS7, ¿pero esos cambios rompieron la funcionalidad scrollsToTop ?

Actualizar

En respuesta a un comentario en una de las respuestas, lo probé para asegurarme de que mi vista de colección fuera realmente la única vista de desplazamiento en la pantalla, y fue:

(lldb) po [self.view recursiveDescription] <UIView: 0x1092ddf0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x109357e0>> | <UICollectionView: 0x11351800; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x10966080>; layer = <CALayer: 0x109623a0>; contentOffset: {0, -64}> collection view layout: <UICollectionViewFlowLayout: 0x10940a70> | | <UIImageView: 0x10965fa0; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x10965ee0>> - (null) | | <UIImageView: 0x10948f60; frame = (316.5 561; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x10966030>> - (null)

Actualización # 2

No estoy seguro de si es importante, pero estoy usando un iOS7 NavigationController estándar donde la barra de navegación es transparente y aplica un desenfoque a mi colección / tablaVistas mientras se desplazan por debajo.

Actualización # 3

Lo averigué. Resulta que tenía más de un scrollView en la pantalla. Mi aplicación tiene un menú del cajón izquierdo debajo de la parte principal de la aplicación, y ese menú tiene una vista de tabla para las opciones. Simplemente configuré self.menuTable.scrollsToTop = false y todo funcionó como se esperaba en el resto de la aplicación. No tenía que implementar los métodos scrollView Delegate ni nada.


Esto siempre funciona para mí:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];


La respuesta corta es que no hay nada diferente en iOS7. Mientras no haya más de un UIScrollView cargado, su tableView o collectionView se desplazará a la parte superior cuando el usuario toque la barra de estado. La clave aquí está cargada; otro scrollView no necesariamente tiene que estar en la pantalla para entrar en conflicto con otro scrollView que sea.

Los cajones deslizantes de izquierda / derecha son muy populares en estos días, y este fue el motivo de mi problema. Tengo un menú que contiene mis opciones de navegación, y todas están en poder de un UITableView. Tuve que asegurarme de configurar menuTable.scrollsToTop = false antes de poder hacer que las cosas funcionen en las otras partes de mi aplicación.


Mi problema fue que tenía un UITextView con UITextView configurado en YES , por lo que mi UITableView no estaba respondiendo al gesto. En resumen, haga que todas las demás vistas desplazables se puedan comprobar.


Si las celdas de tu tabla son dinámicas, elimina lo siguiente:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView { return YES; }

Crea una nueva función de la siguiente manera:

- (void) disableScrollsToTopPropertyOnAllSubviewsOf:(UIView *)view { for (UIView *subview in view.subviews) { if ([subview isKindOfClass:[UIScrollView class]]) { ((UIScrollView *)subview).scrollsToTop = NO; } [self disableScrollsToTopPropertyOnAllSubviewsOf:subview]; } }

Llame a la función anterior en - (void)viewDidLoad

[self disableScrollsToTopPropertyOnAllSubviewsOf:self.view];

Ahora habilite ScrollsToTop para su vista de tabla de la siguiente manera:

[myTableView setScrollsToTop:YES];


para otros :

Recuerde que la vista de desplazamiento que está buscando también puede ser un UIWebView ... no solo UITableView. Otra cosa importante es que no se trata solo de VISIBLE scrollViews, sino de LOADED scrollviews.

Si no encuentra el scrollView, siempre puede insertar la tabla de prueba UITableView, inmediatamente cuando se inicia la aplicación, verifique si está en la parte superior, y luego cargar más y más vistas, hasta que la tabla de prueba deje de desplazarse hacia arriba.