2017-02-17 3 views
1

, ich habe durch fast alle Stackoverflow Antworten auf diese spezielle Frage sah und selbst sah durch Tutorials, die angeblich beibringen, wie man eine Scroll-Ansicht verwenden, aber es scheint nicht für mein Projekt anzuwenden ..UIScrollView scrollt überhaupt nicht, wenn programmgesteuert in Swift? So

Hier ist, was ich bis jetzt weiß, damit eine Scroll-Ansicht richtig funktioniert, müssen Sie ihr zuerst eine Inhaltsgröße geben. Dies bestimmt die scrollbare Höhe usw.

Ich habe einen Code zur Verfügung gestellt, um Ihnen eine bessere Vorstellung davon zu geben, wie ich diese Artikel in meine Scrollview einfüge. Wenn es etwas gibt, das ich falsch mache oder wenn es einen besseren Weg gibt, dies zu tun, lass es mich wissen, ich bin noch ziemlich neu in Swift und iOS Entwicklung und in meinen Gedanken fühlt es sich an, als ob ich es richtig mache.

Die Schritte Ich nehme

  1. Artikel erstellen, die ich (Eingabefelder, Imageviews etc ..)
  2. Add angezeigt werden soll die Gegenstände auf die Ansicht des Viewcontroller. (View.addsubview (etc ..))
  3. eine Scrollview erstellen und seine Einschränkungen festgelegt, dass gleich der Bildschirm/view
  4. In unserer Ansicht nach mit allen Elementen in es in die Scroll-Ansicht
  5. Entspannen Sie sich und alles sollte perfekt funktionieren ?????

Hier ist mein Code, ich weiß es langwierig sein könnte, aber ich denke, es ist so erforderlich sein könnten, dass der Umfang meiner Frage

verstanden
class JobRegistrationController: UIViewController { 

// ... Omitted for clarity 
lazy var scrollView: UIScrollView = { 
    let view = UIScrollView(frame: UIScreen.main.bounds) 
    view.backgroundColor = .red 
    view.contentSize = CGSize(width: self.view.bounds.width, height: self.view.bounds.height * 2) 
    view.translatesAutoresizingMaskIntoConstraints = false 
    return view 
}() 

//... Omitted for clarity 

    let scrollContentView: UIView = { 
    let view = UIView() 
    view.translatesAutoresizingMaskIntoConstraints = false 
    return view 
}() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Need so that view controller is not behind nav controller 
    self.edgesForExtendedLayout = [] 

    view.addSubview(scrollView) 
    scrollView.addSubview(scrollContentView) 
    scrollContentView.addSubview(jobTypeField) 
    scrollContentView.addSubview(jobTypeDividerLine) 

    // x, y, width and height constraints 
    scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
    scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
    scrollView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
    scrollView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 

    // x, y, width and height constraints 
    scrollContentView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true 
    scrollContentView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true 
    scrollContentView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
    scrollContentView.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 

    // x, y, width and height constraints 
    jobTypeField.leftAnchor.constraint(equalTo: scrollContentView.leftAnchor, constant: 20).isActive = true 
    jobTypeField.topAnchor.constraint(equalTo: scrollContentView.topAnchor).isActive = true 
    jobTypeField.rightAnchor.constraint(equalTo: scrollContentView.rightAnchor, constant: -8).isActive = true 
    jobTypeField.heightAnchor.constraint(equalToConstant: 30).isActive = true 

    // x, y, width and height constraints 
    jobTypeDividerLine.leftAnchor.constraint(equalTo: scrollContentView.leftAnchor, constant: 20).isActive = true 
    jobTypeDividerLine.topAnchor.constraint(equalTo: jobTypeField.bottomAnchor).isActive = true 
    jobTypeDividerLine.rightAnchor.constraint(equalTo: scrollContentView.rightAnchor).isActive = true 
    jobTypeDividerLine.heightAnchor.constraint(equalToConstant: 0.5).isActive = true 

Antwort

2
view.contentSize = CGSize(width: self.view.bounds.width, height: self.view.bounds.height * 2) 

Sie sollten versuchen, die contentSize in Ihrer Konsole anmelden, nachdem es für den Zugriff versucht. Ich bin mir nicht sicher, ob Sie hier die korrekte contentSize einstellen, wenn die self.view.bounds korrekt berechnet wurde, wenn diese in diesem Moment aufgerufen wird. Da es Zeit braucht, bis self.view frame und bounds berechnet werden.

Versuchen Sie, Ihre contentSizenach Sie haben den tatsächlichen Inhalt basierend auf der tatsächlichen Gesamtgröße des Inhalts hinzugefügt.

EDIT:

Fügen Sie ein einzelnes UIView innerhalb des scrollView, mit den verbundenen Auflagen zu Top-Bottom-Auflauf-Ablauf und Ihre Subviews hinzufügen. Legen Sie für scrollView dieselben Einschränkungen fest wie für den SuperView-Befehl top-bottom-leading-trailing.

+0

Hi, danke für den Vorschlag.Wenn ich in meiner Ansicht rolle, sehe ich, wie sich die Bildlaufleiste nach oben und unten bewegt, aber der Inhalt meiner Ansicht bewegt sich nicht –

+0

@EdwardLim Das ist ein anderes Problem. Die Lösung dafür besteht darin, alle Ihre Unteransichten in einer einzigen UIView zu platzieren, sodass Sie die einzelne UIView als Unteransicht innerhalb der scrollView hinzufügen können. Vermeiden Sie alle Unteransichten innerhalb der scrollView, ohne eine einzige UIView "scrollContentView" für alle zu haben. Andernfalls werden Sie auf große Fehler stoßen, wie Sie es zum Beispiel beschrieben haben. –

+0

Hallo könntest du bitte vorschlagen, wie man das richtig macht? Ich habe bereits versucht, eine Ansicht in die Bildlaufansicht hinzuzufügen, aber es scheint genau dasselbe zu tun. –

2

Verwenden Sie diese Methode in Ihrer Klasse

override func viewDidLayoutSubviews() 
    { 
    scrollView.delegate = self 
    scrollView.contentSize = CGSize(width:self.view.frame.size.width, height: 1000) // set height according you 
    } 
+0

Hallo, danke für den Vorschlag. Wenn ich in meiner Ansicht blättern kann, sehe ich, wie sich die Bildlaufleiste nach oben und unten bewegt, aber der Inhalt meiner Ansicht bewegt sich nicht. –

+0

Ich glaube, Ihre Ansicht wird in der Bildlaufansicht nicht ordnungsgemäß hinzugefügt. Fügen Sie die Inhaltsansicht innerhalb der Bildlaufansicht hinzu. –

+0

Hallo, hast du irgendwelche Vorschläge, wie das geht? Ich habe eine Änderung in meinem Code gemacht, die Scroll-Inhaltsansicht hinzufügend, aber sein Tun das gleiche Ding –

Verwandte Themen