Entonces en un UITableView cuando tiene secciones, la vista de sección se pega a la parte superior hasta que la siguiente sección se superpone y luego la reemplaza. Quiero tener un efecto similar, donde básicamente tengo una UIView en mi UIScrollView, que representa las secciones de UIView y cuando llega a la cima ... Quiero que permanezca allí y no se cargue. ¿Cómo hago esto? Creo que esto debe hacerse en layoutSubviews o scrollViewDidScroll y hacer una manipulación en el UIVIew ..haga que UIView en UIScrollView se adhiera a la parte superior cuando se desplazó hacia arriba
Respuesta
Si no recuerdo mal, la presentación 2010 WWDC ScrollView analiza con precisión cómo mantener una vista en una posición fija mientras que otros elementos se desplazan a su alrededor . Mire el video y debe tener un enfoque claro para implementar.
Básicamente está actualizando marcos basados en callbacks scrollViewDidScroll (aunque la memoria es un poco confusa en los puntos más finos).
Para crear UIView en UIScrollView se adhieren a la parte superior cuando desplazado hasta hacer:
- (void)createHeaderView:(UIView*)headerView {
_headerView = [headerView retain];
_headerViewInitialY = _headerView.frame.origin.y;
[_scrollView addSubview:_headerView];
_scrollView.delegate = self;
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
CGRect headerFrame = _headerView.frame;
headerFrame.origin.y = MAX(_headerViewInitialY, scrollView.contentOffset.y);
_headerView.frame = headerFrame;
}
Realmente se ve bien – svmrajesh
Asegúrese de que la vista que desea capturar tiene un conjunto de delegados, y ese delegado es donde se moverá scrollViewDidScroll. Si permite que su controlador implemente el protocolo
Intenté esto y funciona bien, pero mi vista se volvió translúcida e intenté todo, pero no lo logré, así que por favor, ¿pueden ayudarme en el camino o razonar por qué está sucediendo? Solo se vuelve translúcido por un tiempo hasta que se pega a la parte superior – Soniya
Swift Solución según la respuesta del EVYA:
var navigationBarOriginalOffset : CGFloat?
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
navigationBarOriginalOffset = navigationBar.frame.origin.y
}
func scrollViewDidScroll(scrollView: UIScrollView) {
navigationBar.frame.origin.y = max(navigationBarOriginalOffset!, scrollView.contentOffset.y)
}
solución de Evya funciona muy bien, sin embargo, si utiliza Auto Diseño, debe hacer algo como esto (la sintaxis de diseño automático está escrita en Masonry, pero se entiende la idea):
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
//Make the header view sticky to the top.
[self.headerView mas_remakeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.scrollView.mas_top).with.offset(scrollView.contentOffset.y);
make.left.equalTo(self.scrollView.mas_left);
make.right.equalTo(self.scrollView.mas_right);
make.height.equalTo(@(headerViewHeight));
}];
[self.scrollView bringSubviewToFront:self.headerView];
}
Desafortunadamente esto te obliga a recrear las restricciones de diseño con cada fotograma del movimiento de desplazamiento. En cambio, lo que debe hacer es tener un contenedor que contenga el 'UIScrollView' y hacer que la parte superior del encabezado sea igual a la * cima del * contenedor, no la parte superior del desplazamiento más el desplazamiento del contenido. Hacerlo de esta manera le permite configurar las restricciones una vez. –
mas_updateConstraints – Jaro
- 1. Haga que un div se adhiera a la parte superior de la pantalla si se desplazó hacia abajo
- 2. ¿Cómo sé que la vista de desplazamiento ya se desplazó hacia la parte inferior?
- 3. ¿Evita que la pantalla se desplace hacia arriba cuando se muestra el teclado virtual en WP7?
- 4. ¿Cómo hacer que Div aparezca desde la parte superior cuando se desplaza hacia abajo?
- 5. Cómo saber si ListView se desplazó hacia arriba ¿La posición más alta?
- 6. Android ScrollVer cómo mantener el componente en la pantalla cuando se desplaza hacia la parte superior de la pantalla?
- 7. UIScrollView salta hacia abajo cuando se tocó por primera vez
- 8. Cabecera UITableView que se mantiene en la parte superior
- 9. window.location.hash = ""; evitar desplazarse hacia la parte superior?
- 10. Evitar que la aplicación web de iPhone en caché se vuelva a cargar (desplazarse hacia arriba)
- 11. ¿Cómo impido que un área de texto se desplace hacia la parte superior cada vez que cambio su valor?
- 12. Cuadro de texto enriquecido se desplaza hacia la parte inferior cuando se escriben datos nuevos
- 13. Cómo saber cuándo UITableView se desplazó hacia abajo en iPhone
- 14. Mi UIScrollView rebota a la parte superior cuando lo dejo ir
- 15. ventana de diálogo desplazándose hacia arriba cuando se abre jQuery
- 16. La textura de OpenGL se desplazó un poco hacia la izquierda cuando se aplicaba a un quad
- 17. diseño de la pantalla se mueve hacia arriba cuando se visualiza el teclado
- 18. IPhone - UIView addSubview Gap en la parte superior
- 19. enlace con la página href = "#" se desplaza a la parte superior cuando se utiliza con jQuery slideToggle
- 20. CSS: Hacer que el pie de página se adhiera a la parte inferior de una página
- 21. JQuery .slideDown() se está deslizando hacia arriba
- 22. Hacer que BoxLayout mueva los componentes hacia arriba mientras se apila de izquierda a derecha
- 23. UITableView desplácese hacia arriba al tocar la barra de estado en la parte superior de la pantalla
- 24. GridView se desplaza hacia atrás hasta la parte superior después de la selección de fila
- 25. Android ListView desplazándose hacia arriba
- 26. UITableViewCell se vuelve a seleccionar cuando se desplazó de nuevo en la pantalla
- 27. Haciendo que la imagen del pie de página se adhiera a la parte inferior del navegador web o página
- 28. UIButton touch se retrasa cuando en UIScrollView
- 29. Cómo desplazarse WebView hacia arriba en Android?
- 30. Cómo evito que la vista de lista se desplace hacia la parte superior después de usar setAdapter
hmm .. básicamente tienes que comprobar si esa UIView seccionada está en la parte superior y luego mantenerla allí ¿verdad? Mi problema es cómo determinar si ese UIView seccionado está en la "parte superior" – xonegirlz
Para determinar qué vista se encuentra en la parte superior, puede solicitar a la supervista su variedad de subvistas, p. Subvistas de NSArray * = [subvistas de superview]. Luego, solicite a su matriz los índices de las subvistas que desea comparar, por ejemplo, NSUInteger oneIndex = [subviews indexOfObject: viewOne], twoIndex = [subviews indexOfObject: viewTwo]. Una vez que haya obtenido los índices de ambas subvistas, simplemente evalúe cuál es mayor para determinar cuál está sobre la otra. – isaac
cuando digo arriba, sin querer decir uno encima del otro ... pero quiero decir que está en contentOffSet.y – xonegirlz