Ich möchte eine gemeinsame und richtige Art der Berechnung der Höhe für benutzerdefinierte Zellen lernen.
Meine Zellen werden von der Spitze geladen, sie haben zwei mehrzeilige UILabels übereinander.
Momentan erstelle ich eine spezielle Konfigurationszelle in viewDidLoad und verwende sie in heightForRowAtIndexPath.iOS der richtige Weg der HöheForRowAtIndexPath Berechnung
-(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
[self configureCell:self.configurationCell forIndexPath:indexPath];
CGRect configFrame = self.configurationCell.frame;
configFrame.size.width = self.view.frame.size.width;
self.configurationCell.frame = configFrame;
[self.configurationCell layoutSubviews];
UILabel *label = (UILabel *)[self.configurationCell viewWithTag:2];
float height = label.frame.origin.y + label.frame.size.height + 10;
return height;
}
Es funktioniert, scheint aber eine schlechte Art und Weise zu sein. Ich denke, dass Höhen für jeden Gegenstand und jede Orientierung vorausberechnet werden müssen. Aber ich finde keinen Weg, um es schön und unkompliziert zu machen.
Können Sie mir helfen?
Der Stil von Cell Labels (wie Schriftart und Offsets von den Bildschirmrändern) muss aus der NIB-Datei geladen werden (Zelle befindet sich in der Nib).
Added Zelle layourSubviews Methode:
-(void) layoutSubviews {
[super layoutSubviews];
[self.shortDescriptionLabel resize];
CGRect longDescriptionFrame = self.longDescriptionLabel.frame;
longDescriptionFrame.origin.y = self.shortDescriptionLabel.frame.origin.y + self.shortDescriptionLabel.frame.size.height + 5;
self.longDescriptionLabel.frame = longDescriptionFrame;
[self.longDescriptionLabel resize];
}
Resize-Methode Etiketten einfach erhöht es Höhe ist den ganzen Text zu passen. So wird die Höhe der Zelle berechnet als longDescriptionLabel.bottom + 10. Einfacher Code, aber nicht sehr schön.
Ich erstelle nichts in heightForRowAtIndexPath. Ich stelle einfach Texte und Anruflayout für die Zellenansicht ein. Diese Konfigurationszelle wird einmal aus der NIB-Datei in der ViewDidLoad erstellt. Sie liegen also falsch - in heightForRowAtIndexPath werden keine Ansichten erstellt. Ich möchte einen direkten Weg finden, um Berechnungen durchzuführen. Die Schriftgrößen und -abmessungen der Zelle im Controller zu bekommen, ist zu kompliziert für mich. – Division
Nun, du hast keinen Inhalt für '' layoutSubviews'' bereitgestellt, also ist es eine Blackbox für mich. Trotzdem steht mein Vorschlag immer noch. In '' heightForRowAtIndexPath'' sollten Sie nichts Kompliziertes machen, da es für jede Zeile aufgerufen wird. Ich spreche von einer optimalen Wahl, wo Sie Ihre Ansicht ordnen können. Wenn Sie das Gefühl haben, dass es zu kompliziert ist, brauchen Sie diese Optimierung nicht. –
Ich habe meinem Beitrag die layoutSubviews-Methode hinzugefügt. Es ist nicht kompliziert, wie Sie sehen können. Sollte ich diesen einfachen Ansatz ohnehin durch Höhenvorberechnung ersetzen? – Division