Freigeben über


Zeilenhöhe automatisch anpassen in Xamarin.iOS

Warnung

Der iOS Designer ist seit Visual Studio 2019, Version 16.8, und Visual Studio 2019 für Mac, Version 8.8, veraltet und wurde in Visual Studio 2019, Version 16.9, bzw. Visual Studio für Mac, Version 8.9, entfernt. Die empfohlene Vorgehensweise zum Erstellen von iOS-Benutzeroberflächen besteht darin, Xcode Interface Builder direkt auf einem Mac auszuführen. Weitere Informationen finden Sie unter Entwerfen von Benutzeroberflächen mit Xcode.

Ab iOS 8 hat Apple die Möglichkeit hinzugefügt, eine Tabellenansicht (UITableView) zu erstellen, die die Höhe einer bestimmten Zeile basierend auf der Größe des Inhalts mithilfe von AutoLayout, Größenklassen und Einschränkungen automatisch vergrößern und verkleinern kann.

iOS 11 hat die Möglichkeit hinzugefügt, dass Zeilen automatisch erweitert werden können. Kopfzeilen, Fußzeilen und Zellen können jetzt basierend auf ihrem Inhalt automatisch angepasst werden. Wenn Ihre Tabelle jedoch im iOS-Designer, Im Schnittstellen-Generator oder mit festen Zeilenhöhen erstellt wird, müssen Sie die Selbstgröße von Zellen manuell aktivieren, wie in diesem Handbuch beschrieben.

Zellenlayout im iOS-Designer

Öffnen Sie das Storyboard für die Tabellenansicht, für die Sie die Größe der Zeile automatisch im iOS-Designer ändern möchten, wählen Sie den Prototyp der Zelle aus, und entwerfen Sie das Layout der Zelle. Zum Beispiel:

Prototypdesign der Zelle

Fügen Sie für jedes Element im Prototyp Einschränkungen hinzu, um die Elemente an der richtigen Position zu halten, da die Tabellenansicht für Drehung oder unterschiedliche iOS-Gerätebildschirmgrößen geändert wird. Beispiel: Anheften der Title oberen, linken und rechten Seite der Inhaltsansicht der Zelle:

Anheften des Titels an den oberen, linken und rechten Rand der Zelleninhaltsansicht

Im Fall unserer Beispieltabelle ist das kleine Label Feld (unter dem Title) das Feld, das verkleinert und vergrößert werden kann, um die Zeilenhöhe zu vergrößern oder zu verkleinern. Um diesen Effekt zu erzielen, fügen Sie die folgenden Einschränkungen hinzu, um links, rechts, oben und unten auf der Beschriftung anzuheften:

Diese Einschränkungen zum Anheften von links, rechts, oben und unten auf der Beschriftung

Da wir nun die Elemente in der Zelle vollständig eingeschränkt haben, müssen wir klären, welches Element gestreckt werden soll. Legen Sie hierzu die Priorität der Inhaltseinarmung und die Priorität der Inhaltskomprimierung nach Bedarf im Abschnitt "Layout" des Eigenschaftenblocks fest:

Der Abschnitt

Legen Sie das Element fest, das Sie erweitern möchten, um einen niedrigeren Prioritätswert für Umarmungspriorität und einen niedrigeren Wert für komprimierungswiderstandspriorität zu haben.

Als Nächstes müssen wir den Zellprototyp auswählen und ihm einen eindeutigen Bezeichner geben:

Geben des Zellprototyps einen eindeutigen Bezeichner

Im Fall unseres Beispiels . GrowCell Wir verwenden diesen Wert später, wenn wir die Tabelle auffüllen.

Wichtig

Wenn Ihre Tabelle mehr als einen Zelltyp (Prototyp) enthält, müssen Sie sicherstellen, dass jeder Typ für Identifier die automatische Zeilenänderung eindeutig ist.

Weisen Sie für jedes Element unseres Zellprototyps einen Namen zu, um es C#-Code verfügbar zu machen. Zum Beispiel:

Weisen Sie einen Namen zu, um ihn C#-Code verfügbar zu machen.

Fügen Sie als Nächstes eine benutzerdefinierte Klasse für die UITableViewController, die UITableView und den UITableCell (Prototyp) hinzu. Zum Beispiel:

Hinzufügen einer benutzerdefinierten Klasse für den UITableViewController, die UITableView und die UITableCell

Um sicherzustellen, dass alle erwarteten Inhalte in unserer Bezeichnung angezeigt werden, legen Sie die Lines-Eigenschaft auf 0:

Die Lines-Eigenschaft auf 0 festgelegt

Fügen wir mit der definierten Benutzeroberfläche den Code hinzu, um die Größe der automatischen Zeilenhöhe zu aktivieren.

Aktivieren der Automatischen Größenänderungshöhe

Wenn wir eine Zelle dequeueieren, müssen wir in der Datenquelle () der Tabellenansicht (UITableViewDatasource) oder der Quelle (UITableViewSource) die Identifier im Designer definierte Zelle verwenden. Zum Beispiel:

public string CellID {
    get { return "GrowCell"; }
}
...

public override UITableViewCell GetCell (UITableView tableView, Foundation.NSIndexPath indexPath)
{
    var cell = tableView.DequeueReusableCell (CellID, indexPath) as GrowRowTableCell;
    var item = Items [indexPath.Row];

    // Setup
    cell.Image = UIImage.FromFile(item.ImageName);
    cell.Title = item.Title;
    cell.Description = item.Description;

    return cell;
}

Standardmäßig wird die Tabellenansicht für die Automatische Größenänderung der Zeilenhöhe festgelegt. Um dies sicherzustellen, sollte die RowHeight Eigenschaft auf UITableView.AutomaticDimension. Wir müssen auch die EstimatedRowHeight Eigenschaft in unserer UITableViewController. Zum Beispiel:

public override void ViewWillAppear (bool animated)
{
    base.ViewWillAppear (animated);

    // Initialize table
    TableView.DataSource = new GrowRowTableDataSource(this);
    TableView.Delegate = new GrowRowTableDelegate (this);
    TableView.RowHeight = UITableView.AutomaticDimension;
    TableView.EstimatedRowHeight = 40f;
    TableView.ReloadData ();
}

Diese Schätzung muss nicht genau sein, nur eine grobe Schätzung der durchschnittshöhe jeder Zeile in der Tabellenansicht.

Wenn diese App ausgeführt wird, wird jede Zeile basierend auf der Höhe der letzten Beschriftung im Zellprototyp verkleinern und vergrößert. Zum Beispiel:

Ausführen einer Beispieltabelle