Quindi in un UITableView quando ci sono sezioni la vista di sezione rimane in alto fino a quando la sezione successiva si sovrappone e poi la sostituisce in cima. Voglio avere un effetto simile, in cui fondamentalmente ho un UIView nel mio UIScrollView, che rappresenta le sezioni di UIView e quando arriva in cima .. Voglio che rimanga lì dentro e non venga portato avanti. Come faccio a fare questo? Penso che questo debba essere fatto sia in layoutSubviews che scrollViewDidScroll e fare una manipolazione su UIVIew ..rendere UIView in UIScrollView bastone in alto quando si scorre su
risposta
Se ricordo male, la presentazione 2010 WWDC ScrollView discute precisamente come mantenere una vista in una posizione fissa mentre altri elementi lo fanno scorrere intorno . Guarda il video e dovresti avere un approccio chiaro da implementare.
Sta essenzialmente aggiornando i frame basati sui callback scrollViewDidScroll (sebbene la memoria sia un po 'confusa sui punti più fini).
Per creare UIView in UIScrollView attaccare alla parte superiore quando scorrere fino fare:
- (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;
}
Davvero un bell'aspetto – svmrajesh
Assicurati che la vista che intendi catturare pergamene abbia un set di delegati, e che delegato sia dove vivrà scrollViewDidScroll. Se si consente al controller di implementare il protocollo
Ho provato questo e funziona bene ma il mio punto di vista diventa traslucido e ho provato tutto ma non ci sono riuscito, quindi per favore puoi aiutarmi a capire come funziona. È solo traslucido per un po 'fino a quando non si attacca all'inizio – Soniya
Swift soluzione in base alla risposta 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)
}
soluzione Evya funziona davvero bene, se si utilizza Auto Layout, dovresti fare qualcosa del genere (la sintassi Auto Layout è scritta in Masonry, ma ti viene l'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];
}
Sfortunatamente questo ti costringe a ricreare i vincoli del layout con ogni fotogramma di movimento di scorrimento. Invece, quello che dovresti fare è avere un contenitore contenente 'UIScrollView' e rendere la parte superiore dell'intestazione uguale alla parte superiore * del contenitore *, non l'offset del contenuto più alto della scrollview. Facendolo in questo modo ti permette di impostare i vincoli una volta. –
mas_updateConstraints – Jaro
- 1. NestedScrollView scorre in alto su Recyclerview ridimensionato
- 2. UIScrollView non scorre fino all'orientamento
- 3. Scorre automaticamente la schermata in vim quando si trova in prossimità/in alto/in basso?
- 4. UIScrollView non scorre (Storyboard)
- 5. UITableView Scorre in alto nella cella Aggiorna
- 6. come rendere iOS 7 UIScrollView sopprime gli eventi di tocco su UIView incorporato
- 7. jQuery: Rileva quando si scorre l'elemento su
- 8. Avvia l'animazione quando si scorre su
- 9. _adjustContentOffsetIfNecessario - UIScrollView scorre automaticamente verso l'alto
- 10. UIScrollView scorre troppo dopo lo zoom iniziale
- 11. iPhone SDK: UIScrollView non scorre
- 12. Mostra gli indicatori mentre si scorre a scorrimento di UIScrollView
- 13. UIScrollView scroll block block Uiview animazione
- 14. Area bianca su sfondo fisso quando si scorre su ios
- 15. Come posso rendere uiscrollview infinito in iOS?
- 16. Rendere il contenuto dopo aver ingrandito UIScrollView
- 17. Rendere trasparente UIView
- 18. Limitare l'area scorrevole in UIScrollView
- 19. UIScrollView che scorre in una sola direzione alla volta
- 20. Come rendere UIView selezionabile
- 21. iPhone - UIScrollView all'interno UIView non scorrebile
- 22. Jquery nav appiccicoso quando si scorre fino
- 23. Come creare un'immagine da un UIView/UIScrollView
- 24. Come si scorre a una posizione in modo programmatico in UIScrollView
- 25. Aggiungere UIScrollView in UIView a livello di programmazione
- 26. UIView in cima UIScrollView, passano attraverso solo rotoli, non rubinetti
- 27. Come rendere scorrevole un UIScrollView?
- 28. La finestra di dialogo jQueryUI scorre in alto quando si fa clic sul pulsante Chiudi in IE
- 29. UIView non obbedisce ai vincoli di autolayout in UIScrollView
- 30. StaggeredGridLayout scombina quando si scorre fino
hmm .. in pratica devi controllare se l'UIView sezionato è in cima e poi tenerlo lì a destra? Il mio problema è come determinare se l'Uiview sezionato è "top" – xonegirlz
Per determinare quale vista è in primo piano, puoi chiedere al superview la sua matrice di subviews, ad es. NSArray * sottoview = [sottoview superview]. Quindi, chiedi al tuo array gli indici delle sottoview che desideri confrontare, ad es. NSUInteger oneIndex = [subviews indexOfObject: viewOne], twoIndex = [subviews indexOfObject: viewTwo]. Una volta che hai scelto gli indici per entrambe le sottoview, valuta semplicemente quale è maggiore per determinare quali sono l'uno sopra l'altro. – isaac
quando dico in alto, non significa uno sopra l'altro .. ma voglio dire che è a contentOffSet.y – xonegirlz