2015-08-25 22 views
12

Scroll AnsichtDeaktivieren Horizontales Scrollen von UIScrollView Swift

ich eine UIScrollView haben, mit Einschränkungen left: 0, top: 0, right: 0, bottom: 0

Innen Scroll Ansicht

An der Spitze dieser UIScrollView ein UIImageView mit Einschränkungen ist left: 0, top: 0, right: 0, height: 200

Darunter habe ich eine UITextView mit Einschränkungen left: 0, top: 0, right: 0, bottom: 0

Das bedeutet, die UITextView in Bezug auf ihren Inhalt der Größe, und ich die scrollingEnabled-false für die UITextView.

Also, wenn ich laufe, es fast funktioniert perfekt.

Das einzige Problem ist die UIImageView dauert etwa 10% mehr als die tatsächliche Bildschirmbreite. Daher ist das horizontale Scrollen aktiviert.

Ich habe versucht, das Hinzufügen der Linien

imageView.frame = CGRect(0, 0, screenSize.width, 200) 
scrlView.contentSize.width = screenSize.width 

aber das macht keinen Unterschied. Ich kann immer noch horizontal scrollen und die Bildansicht nimmt immer noch ca. 10% mehr als die tatsächliche Bildschirmbreite ein.

Hinweis, ich habe die imageView-Bildschirmbreite im Storyboard nicht nur programmatisch festgelegt.

Irgendwelche Ideen?

+0

Tun Sie dies 'scrlView.contentSize.width = 0;' – iphonic

+0

Siehe diesen Link http://stackoverflow.com/questions/27326924/swift-uiscrollview-correct-implementation-for-only-vertical-scrolling –

+0

Ich traf gleich Problem in der Vergangenheit oft. Ich habe mein Problem mit der Verwendung von Contentview in scrollView gelöst. Ich rate uiview als Inhaltsansicht in scrollView. Der grundlegende Punkt ist die Breite von contentView sollte gleich scrollView Breite sein. Alle Ihre Bildansicht Textansicht usw. muss in der Inhaltsansicht sein. – muhammedkasva

Antwort

12

Wie diese

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if scrollView.contentOffset.x>0 { 
     scrollView.contentOffset.x = 0 
    } 
} 

Und Sie diese Eigenschaft festlegen kann:

scrollImg.directionalLockEnabled = true 
+0

perfekt, es funktionierte mit der ersten Funktion. Was macht "directionLockEnabled"? –

+0

Eigentlich ist das Scrollen gestoppt, aber das ImageView ist immer noch zu groß –

+0

Ich habe es mit Einschränkungen behoben, egal –

1

Wenn Sie Storyboard und automatisches Layout verwenden, dann sollten Sie, wie Scroll Arbeit in der Storyboard mit automatischem Layout betrachten.

Betrachten Sie Folgendes.

  1. eine einheitliche Sicht auf Ihre Scroll hinzufügen mit Constraints links, rechts, oben, unten, Höhe, Breite,

  2. Machen Sie den Ausgang der Breite und Höhe

  3. Fügen Sie Ihre Subviews zu der Ansicht hinzugefügt Sie in der Scroll

Update, um die Breite der Bildschirmgröße zB 320 für iPhone5 oder 4.

self.viewWidth = SCREEN_WIDTH; 
[self.view updateConstraints]; 
12

Das obige prüft nur für X in einer Richtung (positive Bewegung).Um beide Links/Rechts Scrollen zu verhindern:

func scrollViewDidScroll(scrollView: UIScrollView) { 
    if scrollView.contentOffset.x != 0 { 
     scrollView.contentOffset.x = 0 
    } 
} 

Keine Notwendigkeit für die Richtungssperre.

+1

Funktioniert auch in vertikaler, nur wechselnde '.x' zu' .y' –

+0

Bessere Antwort als Loxx – FredFlinstone

+0

Ausgezeichnete Antwort! – user7097242

Verwandte Themen