2013-10-09 12 views
5

In this technical Note Apple afferma che è possibile rendere fissa/mobile una sottoview di UIScrollView aggiungendo vincoli alla superview di UISCrollView. L'ho provato ma sto facendo qualcosa di sbagliato e non riesco a capire qual è il problema.Fixed/Float view in UIScrollView con AutoLayout

Nota che si può fare una visualizzazione secondaria della vista di scorrimento sembrano galleggiare (non scorrere) sopra l'altra contenuti scorrimento con la creazione di vincoli tra la vista e la vista al di fuori sottostruttura della vista di scorrimento, come superview della vista di scorrimento .

Questo è quello che ho fatto. Ho un UIScrollView già impostato e cercare di aggiungere la vista fissato alla parte superiore del ScrollView come la seguente:

_testOverlay = [[UIView alloc] init]; 
_testOverlay.backgroundColor = [UIColor blueColor]; 
_testOverlay.translatesAutoresizingMaskIntoConstraints = NO; 
[self.scrollView addSubview:_testOverlay]; 

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|[_testOverlay]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_testOverlay)]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_testOverlay(64)]-(>=0)-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_testOverlay)]]; 

Tuttavia, questo non funziona, la vista aggiunto si sposterà insieme al ScrollView e non 'galleggiante'. Qualche idea che cosa è sbagliato qui?

risposta

6

tra la vista e una vista fuori sottostruttura della vista di scorrimento, superview come della vista di scorrimento.

Questa parte è fondamentale. self.scrollView è un superview di _testOverlay. Pertanto, nelle barre verticali @"|[_testOverlay]|" fanno riferimento a self.scrollView. È necessario sostituire questo vincolo con il vincolo tra _testOverlay e (suppongo) self.view. Non sono sicuro che sia possibile con il linguaggio del formato visivo, ma sicuramente lo puoi fare con constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant. Sarebbe come questo (non posterò l'intero codice, perché è looong):

[self.view addConstraint:[NSLayoutConstraint 
          constraintWithItem:self.view 
          attribute:NSLayoutAttributeLeft 
          relatedBy:NSLayoutRelationEqual 
          toItem:_testOverlay 
          attribute:NSLayoutAttributeLeft 
          multiplier:1.0 
          constant:0]]; 
+0

Che ha fatto il trucco! Ho pensato che la superview della lingua in formato visivo fosse chiamata da "|" è la vista a cui aggiungo il vincolo. Grazie! –

+1

Come faccio a fare questo se il mio 'self.view' è' UITableView' e non ha una superview? – Eimantas

0

Aggiungi la vista di sovrapposizione per scorrere la vista panoramica della vista, non la vista di scorrimento stessa.

[self.view addSubview:_testOverlay]; 
Problemi correlati