TableView hat eine neue Postion nachdem sie wieder aufgerufen wird

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Macoun 2019 - Frühbucherrabatt bis 26.7.2019

  • TableView hat eine neue Postion nachdem sie wieder aufgerufen wird

    Hallo,

    folgendes Problem. Wenn ich in meiner TableView hoch und runter scrolle und dann irgendwann auf ein Element klicke, wird ein neuer ViewController aufgerufen. Wenn ich dann über den NavigationController auf "back" klicke, bin ich nicht mehr an der Postion an der ich war als ich auf das Element geklickt habe sondern wieder ganz am Anfang.

    Weiß vielleicht jemand was man machen kann um an der ursprünglichen Postion zu bleiben ?
  • Mac & i Test Abo
  • Also tatsächlich wird jedes mal wenn viewDidAppear() aufgerufen wird, ein reloadData ausgeführt welches sich in setQuestionData() befindet...
    Nur was kann ich machen damit die Position die selbe bleibt, schließlich brauche ich den reloadData() Befehl ?

    Quellcode

    1. override func viewDidAppear(_ animated: Bool) {
    2. setQuestionData()
    3. print(defaults.object(forKey: "token") as Any)
    4. if defaults.object(forKey: "token") != nil {
    5. login_session = defaults.object(forKey: "token") as! String
    6. checkSession()
    7. } else {
    8. logout()
    9. }
    10. }

    Quellcode

    1. func setQuestionData() {
    2. let baseURL = URL(string: url)!
    3. var request = URLRequest(url: baseURL)
    4. request.setValue(login_session, forHTTPHeaderField: "Authorization")
    5. request.httpMethod = "GET"
    6. let task = URLSession.shared.dataTask(with: request as URLRequest) { (data, response, error) in
    7. guard let data = data else { return }
    8. let decoder = JSONDecoder()
    9. self.items = (try? decoder.decode(RootElement.self, from: data)) ?? RootElement()
    10. print(self.items)
    11. DispatchQueue.main.async {
    12. self.homeTableView.reloadData()
    13. }
    14. }
    15. task.resume()
    16. }
    Alles anzeigen
  • Ein reloadData() sollte eigentlich nicht dazu führen, dass sich die angezeigte Position im TableView ändert.

    Verändert sich evtl. die Anzahl der items und somit die Anzahl der Zeilen im TableView?

    Füge mal einen Log-Output in tableView:numberOfRowsInSection: hinzu, welche Werte dort zurückgegeben werden. Da solltest Du dann sehr gut erkennen, ob sich die Anzahl der Zeilen im TableView ggf. ändert.

    Die Frage ist auch, ob QuestionData immer wieder neu vom Server geladen werden muss?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von MCDan ()

  • Also laut print Ausgabe im numberOfRowsInSection bleibt die Anzahl der Elemente in der TableView gleich.

    Ich bekomme aber immer folgendes in die Konsole geprintet, könnte ein Layout Problem dafür verantwortlich sein ?:

    2019-03-03 17:41:13.769147-0700 ] The behavior of the UICollectionViewFlowLayout is not defined because:

    2019-03-03 17:41:13.769374-070 ] the item height must be less than the height of the UICollectionView minus the section insets top and bottom values, minus the content insets top and bottom values.

    2019-03-03 17:41:13.770108-0700 The relevant UICollectionViewFlowLayout instance is <UICollectionViewFlowLayout: 0x7fa88b53c900>, and it is attached to <UICollectionView: 0x7fa88c076600; frame = (0 59; 375 276); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x600001702fa0>; layer = <CALayer: 0x600001969a00>; contentOffset: {0, 0}; contentSize: {40, 276}; adjustedContentInset: {0, 0, 0, 0}> collection view layout: <UICollectionViewFlowLayout: 0x7fa88b53c900>.

    2019-03-03 17:41:13.770253-0700 Make a symbolic breakpoint at UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger.