haga que UIView en UIScrollView se adhiera a la parte superior cuando se desplace hacia arriba

Entonces, en un UITableView, cuando tiene secciones, la vista de sección se mantiene en la parte superior hasta que la siguiente sección se solapa y luego la reemplaza en la parte superior. Quiero tener un efecto similar, donde básicamente tengo una UIView en mi UIScrollView, que representa las secciones UIView y cuando llega a la parte superior … Quiero que permanezca allí y no se deje llevar. ¿Cómo hago esto? Creo que esto debe hacerse en layoutSubviews o scrollViewDidScroll y hacer una manipulación en el UIVIew …

Para crear UIView en UIScrollView en la parte superior cuando se desplaza, haga lo siguiente:

- (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; } 

Solución rápida basada en la respuesta de 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) } 

Si recuerdo correctamente, la presentación 2010 WWDC ScrollView analiza con precisión cómo mantener una vista en una position fija mientras que otros elementos se desplazan a su alnetworkingedor. Mire el video y debe tener un enfoque claro para implementar.

Está esencialmente actualizando cuadros basados ​​en devoluciones de llamada scrollViewDidScroll (aunque la memory es un poco brumosa en los puntos más finos).

La solución de Evya funciona muy bien, sin embargo, si usa Auto Layout, debería hacer algo como esto (la syntax de Auto Layout está escrita en Masonry , pero tiene 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]; }