2017-11-03 4 views
0

Immer wenn ich ein TableView neu lade, wird heightForRowAt nach cellForRowAt aufgerufen. Die Reihenfolge, es folgt ist:heightForRowAt wird nach cellforRowAt in UITableView aufgerufen

numberofsections -> numberOfRowsInSection -> cellForRowAt -> heightForRow 

I numberOfSections, numberOfRowsInSection, viewForHeaderInSection Methoden außer Kraft gesetzt haben. Haben diese Auswirkungen auf die Reihenfolge, in der heightForRow und cellForRowAt aufgerufen werden?

ich mit Xcode bin 9.1, Swift 3 auf iOS läuft 11.

+0

jede Änderung der UI-Ausgabe? –

+0

Können Sie mehr Code anzeigen? Ich denke, dass Sie eine Methode an der falschen Stelle aufrufen. –

+1

Warum denken Sie, dass das ein Problem ist? Warum sollte OS "heightForRow" aufrufen, außer Sie haben eine Zelle für diese Zeile zurückgegeben? Die erste Zelle muss mit 'cellForRow' erstellt werden. Wenn Sie möchten, können Sie die Höhe anpassen, indem Sie sie über' heightForRow' zurückgeben. – execv

Antwort

0

Sie haben zwei Möglichkeiten:

  1. Make content der Zelle in der Art und Weise wird es definieren es Größe. Das bedeutet, dass Ihr Layout nicht vertikal ambitioniert sein sollte.
  2. Berechnen Sie die Größe manuell. Summieren Sie Offsets (Höhen) zwischen (von) Subviews. Hier könnte ein Problem bei der Berechnung der label/textView size liegen (leave helper extension zur Berechnung der von mir verwendeten Textgröße). Auf textView.contentInsets achten! Sie müssen es Geist zu halten

    extension String { 
        func height(withConstrainedWidth width: CGFloat, font: UIFont) -> CGFloat { 
         let constraintRect = CGSize(width: width, height: .greatestFiniteMagnitude) 
         let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, 
               attributes: [NSAttributedStringKey.font: font], context: nil) 
    
         return ceil(boundingBox.height) 
        } 
    
        func width(withConstraintedHeight height: CGFloat, font: UIFont) -> CGFloat { 
         let constraintRect = CGSize(width: .greatestFiniteMagnitude, height: height) 
         let boundingBox = self.boundingRect(with: constraintRect, options: .usesLineFragmentOrigin, 
               attributes: [NSAttributedStringKey.font: font], context: nil) 
    
         return ceil(boundingBox.width) 
        } 
    } 
    
    richtige Größe

Hoffnung zu bekommen es wird Ihnen helfen!

Verwandte Themen