2017-11-06 1 views
0

Ich habe eine Ansicht, die wie this aussieht, wo ich neben einem Scrollview eine Tabellenansicht habe.Swift TableView wird nach oben verschoben, wenn die Tischbreite geändert wird

Die Tabellenansicht hat eine feste Tabellenzellenhöhe, keine Abschnitte und vertikales Scrollen. (nur eine Standardtabellenansicht)

Die Bildlaufansicht kann horizontal blättern, und dadurch wird die Tabellenansichtsbreite verringert oder erhöht. (und der Scrollview tut das Gegenteil)

Bis jetzt funktioniert alles.

Das Problem ist, dass beim Scrollen der Scrollview (und damit Erhöhung oder Verringerung der Tabellenansicht Breite) die Tabellenansicht nur leicht nach oben scrollt.

Mein erster Gedanke war, dass die Tabelle viewoffset.y nur ändern würde, aber anscheinend der Offset.y ändert sich überhaupt nicht.

Hat jemand eine Idee, wie man das beheben kann?

bearbeiten: Ich verstehe, dass mein Problem noch nicht ganz klar ist. Ich habe ein Beispielprojekt erstellt, um es zu veranschaulichen. (Download link)

Folgen Sie den folgenden Schritten.

  1. Führen Sie das Projekt
  2. scroll die Tableview (linke Seite) den ganzen Weg nach unten (es hat die Nummer 49)
  3. drag „test“ nach links oder rechts
  4. im Tableview Blick zurück und Sie können feststellen, dass die Tabellenansicht "scrollte".

(Schritt 2b Blättern zu jeder Tabellenzelle Nummer (außer 1) und der Probleme tritt auch auf, Nummer 49 ist nur das Beispiel)

bearbeiten 2: Problem gelöst ist ...

Das Einfügen der folgenden Zeilen löste das Problem.

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat 
{ 
     return 55 
} 

Danke trotzdem!

(mein Code des Viewcontroller)

class ViewController: UIViewController 
{ 
    @IBOutlet weak var TableView: UITableView! 
    @IBOutlet weak var ScrollView: UIScrollView! 

    @IBOutlet weak var scrollViewWidth: NSLayoutConstraint! 
    @IBOutlet weak var TableViewWidth: NSLayoutConstraint! 

    var defaultTableViewWidth:CGFloat! 

    override func viewDidLoad() 
    { 
     super.viewDidLoad() 

     self.defaultTableViewWidth = self.TableViewWidth.constant 
     self.scrollViewWidth.constant = 350 
    } 
} 

extension ViewController : UITableViewDelegate, UITableViewDataSource 
{ 
    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 
     return 55 
    } 
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    { 
     return 50 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    { 

     let cell = tableView.dequeueReusableCell(withIdentifier: "TabCell", for: indexPath) as! TabCell 
     cell.clientLabel.text = "E" 
     cell.debtNumberLabel.text = "\(indexPath.row)" 
     return cell 
    } 

    func scrollViewDidScroll(_ scrollView: UIScrollView) { 

     print("b - offset: \(self.TableView.contentOffset.y)") 
     print("b - rowheight: \(self.TableView.rowHeight)") 
     print("b - cont height: \(self.TableView.contentSize.height)") 

     if scrollView == ScrollView 
     { 
      if scrollView.contentOffset.x < 0 
      { 
       self.TableViewWidth.constant += abs(scrollView.contentOffset.x) 
      } 
      else if scrollView.contentOffset.x > 0 && self.TableViewWidth.constant >= 60 
      { 
       self.TableViewWidth.constant = max(self.TableViewWidth.constant - scrollView.contentOffset.x, 0.0) 

       if self.TableViewWidth.constant >= 60 
       { 
        scrollView.contentOffset.x = 0 
       } 
       else 
       { 
        self.TableViewWidth.constant = 60 
       } 
      } 
     } 

     print("a - offset: \(self.TableView.contentOffset.y)") 
     print("a - rowheight: \(self.TableView.rowHeight)") 
     print("a - cont height: \(self.TableView.contentSize.height)") 
     print(" ") 

    } 

    func animateHeader(height: CGFloat) 
    { 
     self.TableViewWidth.constant = height 
     UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 0.7, initialSpringVelocity: 0.5, options: UIViewAnimationOptions(), animations: { 
      self.view.layoutIfNeeded() 
     }, completion: nil) 
    } 

    func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) 
    { 
     if self.TableViewWidth.constant > self.defaultTableViewWidth 
     { 
      animateHeader(height: self.defaultTableViewWidth) 
     } 
    } 

    func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) 
    { 
     if self.TableViewWidth.constant > self.defaultTableViewWidth 
     { 
      animateHeader(height: self.defaultTableViewWidth) 
     } 
    } 

} 
+0

Auch mit Ihrem [Bild] (https://i.stack.imgur.com/r7OGq.jpg), I bin mir nicht genau sicher, was du erwartest und was sich in die falsche Richtung bewegt. Könntest du ein bisschen klarer sein?Sie können Ihren Beitrag mit der Bearbeitungsschaltfläche bearbeiten oder Ihr Bild durch Hinzufügen von Anmerkungen und Richtungspfeilen klarer machen. – skymook

Antwort

0

die folgenden Informationen helfen würde Debug

  • Welche Einschränkungen verwenden Sie?
  • Ist die Position des Tabellenansichtsrahmens festgelegt oder ändert sie sich beim Ziehen? Vielleicht würde ein Video von dem, was passiert, helfen, dies zu debuggen.

(kann ich nicht kommentieren noch, weshalb ich dies als eine Antwort bin Entsendung)

Verwandte Themen