4 Stimmen

IOS Nachrichtenzellenbreite/-höhe unter Verwendung von Auto Layout

Das Ziel

Ich versuche, eine dynamische Nachrichten-Zelle mit Auto-Layout zu erstellen.

Bildbeschreibung hier eingeben

Was ich versucht habe

Die Zelle positioniert sich größtenteils korrekt mit Auto-Layout, unter Berücksichtigung der folgenden Einschränkungen:

Bildbeschreibung hier eingeben

Das Problem

Mein erstes Problem war, dass die Breite des Nachrichtenlabels (kopierbares Label) eingeschränkt war. Dies scheint gelöst zu sein, indem ich setPreferredMaxLayoutWidth: verwende, wie in dieser Frage beschrieben.

Die Höhe ist immer noch ein Problem. Wie Sie sehen können, wird die Nachrichtenblase immer noch abgeschnitten. Außerdem bin ich mir nicht sicher, wie ich die Höhe der Nachrichtenzelle für die Tabelle bestimmen kann.

Ich hatte erwartet, dass Auto-Layout irgendwie einfach funktioniert. Ich habe die Antwort hier gelesen, aber es scheint viele Schritte zu erfordern.

Die Frage

Erstens, ist Auto-Layout in manchen Fällen komplexer als traditionelle Rahmenberechnungen?

Zweitens, wie kann ich mit Auto-Layout die Höhe der resultierenden Zelle bestimmen?

5voto

Tancrede Chazallet Punkte 6845

Ich nutze Auto Layout vollständig und das von Ihnen angesprochene Problem ist irgendwie ein Problem. Ich wollte nicht den Weg ändern, wie die inhärente Größe für die Leistung von UITable berechnet wird.

Also habe ich einen sehr einfachen Weg genutzt, der am Ende korrekt ist. Es ist in Ordnung, wenn Ihre Zelle einfach ist, kann sehr schwierig werden, wenn Ihre Zelle mehr als einen variablen Text enthält.

Ich habe meine Zellen normal definiert, wo Sie ein UILabel platzieren können, das zu den Insets passt (kein Problem damit). Dann definieren Sie in Ihrem Table-Datensatz direkt die Höhe der Zelle:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return [TEXTOFYOURCELL sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:CGSizeMake(300, 1000)].height + 31; // Hier ist für 15 der oberen und unteren Abstände definiert, es ist wichtig, +1 zu definieren, damit die Größe der Zelle berücksichtigt wird.
}

BEARBEITEN : Hier ein paar Codezeilen zum UILabel in der Zelle (im Init-Methode).

__titleLabel = [UILabel new];
__titleLabel.numberOfLines = 0;
[self.contentView addSubview:__titleLabel]; // Hinzufügen zum contentView ist sehr wichtig anstatt zu self!
[__titleLabel keepInsets:UIEdgeInsetsMake(0, 15, 0, 15)];

Ich nutze diese API: https://github.com/iMartinKiss/KeepLayout, um das Auto Layout einfacher zu verwalten.

2voto

Roy Punkte 646

Dies ist auf iOS 8 möglich, wie auf AppCoda nachgelesen werden kann

Grundsätzlich:

  • Setzen Sie die Label-Zeilen auf 0.
  • Setzen Sie die Zeilenhöhe UITableViewAutomaticDimension

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X