2013-10-09 19 views
5

In this technical Note Apple gibt an, dass Sie eine Unteransicht von UIScrollView fixed/floating durch Hinzufügen von Einschränkungen zu UISCrollView Superview erstellen können. Ich habe das versucht, aber ich mache etwas falsch und ich kann nicht herausfinden, was das Problem ist.Fixed/Float-Ansicht in UIScrollView mit AutoLayout

Beachten Sie, dass Sie ein Subview der Scroll-Ansicht zu machen scheinen zu schweben (nicht gescrollt wird) über den anderen Scroll-Inhalt von Abhängigkeiten zwischen der Ansicht und einer Ansicht außerhalb der Scroll-Ansicht der Unterstruktur, wie zum Beispiel der Bildlaufansicht des Super Schaffung .

Das habe ich gemacht. Ich habe ein UIScrollView bereits eingerichtet und versuchen, den festen Blick auf den oberen Rand des Scrollview wie die folgende hinzu:

_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)]]; 

Dies ist jedoch nicht funktioniert, wird die zugegebene Ansicht mit dem Scroll entlang bewegen und nicht funktioniert 'schweben'. Irgendwelche Ideen, die hier falsch sind?

Antwort

6

zwischen der Ansicht und eine Ansicht außerhalb der Teilstruktur der Scroll-Ansicht, wie Die Super der Bildlaufansicht.

Dieser Teil ist kritisch. self.scrollView ist eine Superansicht von _testOverlay. Also, in @"|[_testOverlay]|" vertikale Balken Referenz self.scrollView. Sie müssen diese Einschränkung durch die Bedingung zwischen _testOverlay und (ich nehme an) self.view ersetzen. Ich bin mir nicht sicher, ob das mit der visuellen Formatsprache möglich ist, aber Sie können es sicherlich mit constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant machen. Es würde so gehen (ich werde den ganzen Code nicht posten, weil es laaange ist):

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

Das tat den Trick! Ich dachte, dass die Visual Format Language Superview von "|" ist die Ansicht, zu der ich die Einschränkung hinzufüge. Vielen Dank! –

+1

Wie würde ich das machen, wenn meine 'self.view'' UITableView' ist und keine Superview hat? – Eimantas

0

Fügen Sie die Überlagerungsansicht hinzu, um die Superansicht der Bildlaufansicht zu öffnen, nicht die Bildlaufansicht selbst.

[self.view addSubview:_testOverlay]; 
Verwandte Themen