webentwicklung-frage-antwort-db.com.de

Wie kann ich das horizontale Scrollen von UIScrollView deaktivieren?

Ich habe eine UIView wie das Sprungbrett des iPhone. Ich habe es mit einer UIScrollView und einer UIButtons erstellt. Ich möchte das horizontale Scrollen in dieser Ansicht deaktivieren. Ich möchte nur vertikales Scrollen. Wie mache ich das?

79
Rahul Vyas

Sie müssen die contentSize-Eigenschaft von UIScrollView festlegen. Wenn Ihr UIScrollView beispielsweise 320 Pixel breit ist (Bildschirmbreite), können Sie Folgendes tun:

CGSize scrollableSize = CGSizeMake(320, myScrollableHeight);
[myScrollView setContentSize:scrollableSize];

Das UIScrollView scrollt dann nur vertikal, da es bereits alles horizontal anzeigen kann.

116
Dave DeLong

AKTUALISIERT: (Nachdem @EranMarom auf seinen Kommentar hingewiesen hat)

Sie können den horizontalen Bildlauf oder den vertikalen Bildlauf stoppen in der ScrollViewDelegate-Methode . Hier ist, wie,

Stoppt den horizontalen Bildlauf:

Wenn Sie horizontal scrollen möchten, müssen Sie contentOffset.x erhöhen. Dies verhindert, dass der Bildlauf in horizontaler Richtung gescrollt wird.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.x = 0.0
}

Stoppt den vertikalen Bildlauf:

Wenn Sie vertikal scrollen möchten, müssen Sie contentOffset.y erhöhen. Dadurch wird verhindert, dass der Bildlauf in vertikaler Richtung läuft.

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    sender.contentOffset.y = 0.0
}

Der obige Code verhindert die Änderungen in x und y eines scrollview contentOffset und führt dazu, dass das Scrollen in der scrollViewDidScroll:-Methode angehalten wird.

83
Dinesh Raja

Schnelle Lösung

Erstellen Sie zwei Auslässe, einen für Ihre Ansicht und einen für Ihre Scroll-Ansicht:

@IBOutlet weak var myView: UIView!
@IBOutlet weak var scrollView: UIScrollView!

In Ihren viewDidLayoutSubviews können Sie dann folgenden Code hinzufügen:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: myView.frame.size.height)
scrollView.contentSize = scrollSize

Was wir getan haben, ist, die Höhe und Breite der Ansicht zu erfassen und die Inhaltsgröße von scrollViews entsprechend anzupassen. Dadurch wird Ihr Bildlauf nicht mehr horizontal verschoben. 


Weitere Gedanken:

CGSizeMake nimmt Breite und Höhe mit CGFloats ein. Möglicherweise müssen Sie die vorhandene Höhe der UIScrollViews für den zweiten Parameter verwenden. Was würde so aussehen:

let scrollSize = CGSize(width: myView.frame.size.width, 
                        height: scrollView.contentSize.height)
10
Dan Beaulieu

seit iOS7 verwenden 

self.automaticallyAdjustsScrollViewInsets = NO;

// und erstellen Sie einen Seiten-Scroller mit 3 Seiten

    self.pageView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    [self.pageView setContentSize:CGSizeMake(self.view.frame.size.width*3, self.view.frame.size.height)];
    [self.pageView setShowsVerticalScrollIndicator:NO];
    [self.pageView setPagingEnabled:YES];
    [self.view addSubview:self.pageView];
10
Mirko Brunner

Sie können die Ansicht auswählen und dann unter Attributes Inspector das Kontrollkästchen User Interaction Enabled deaktivieren.

4
Coder221

In meinem Fall können Sie mit Swift 4.2 Folgendes verwenden:

Vertikales Scrollen deaktivieren:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.y = 0.0
}

Horizontalen Bildlauf deaktivieren:

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    scrollView.contentOffset.x = 0.0
}
1
Rincha

Verwenden Sie diese einzelne Zeile.

self.automaticallyAdjustsScrollViewInsets = NO;

0
Karthickkck

In meinem Fall war die Breite von contentView größer als die Breite von UIScrollView und dies war der Grund für unerwünschtes horizontales Scrollen. Ich habe es gelöst, indem ich die Breite von contentView gleich der Breite von UIScrollView gesetzt habe.

Hoffe es hilft jemandem

0
Gulfam Khan

Ich hatte das tableview contentInset in viewDidLoad (wie unten) festgelegt, was den horizontalen Bildlauf verursacht

self.tableView.contentInset = UIEdgeInsetsMake(0, 30, 0, 0);

Prüfen Sie, ob ein content_set für TableView-Inhalte aus verschiedenen Gründen festgelegt ist, und deaktivieren Sie sie

0
Naishta

Versuche dies:

CGSize scrollSize = CGSizeMake([UIScreen mainScreen].bounds.size.width, scrollHeight);
[scrollView setContentSize: scrollSize];
0
Torongo

Nachdem ich das UIScrollView durch ein UITableView mit nur einer Zelle ersetzt hatte, funktionierte es einwandfrei.

Ich hatte einige Zeit damit zu kämpfen und versuchte erfolglos die verschiedenen Vorschläge in diesem und anderen Threads.

In einem anderen Thread (nicht sicher, wo) hat jemand jedoch vorgeschlagen, dass die Verwendung einer negativen Einschränkung für UIScrollView für ihn funktioniert.

Also habe ich verschiedene Kombinationen von Einschränkungen mit inkonsistenten Ergebnissen ausprobiert. Was schließlich für mich funktionierte, war, der Scrollansicht führende und nachlaufende Einschränkungen von -32 hinzuzufügen und eine (unsichtbare) Textansicht mit einer Breite von 320 (und zentriert) hinzuzufügen.

0
PatriciaW