共用方式為


Xamarin.iOS 中的自動重設大小數據列高度

警告

iOS 設計工具在 Visual Studio 2019 16.8 版和 Visual Studio 2019 for Mac 8.8 版中已被取代,並在 Visual Studio 2019 16.9 版和 Visual Studio for Mac 8.9 版中移除。 建置 iOS 使用者介面的建議方式是直接在執行 Xcode 介面產生器的 Mac 上。 如需詳細資訊,請參閱 使用 Xcode 設計使用者介面。

從 iOS 8 開始,Apple 新增了建立數據表檢視的功能UITableView,可根據使用自動版面配置、大小類別和條件約束,自動增加和縮小指定數據列的高度。

iOS 11 已新增數據列自動展開的功能。 頁首、頁尾和儲存格現在可以根據其內容自動重設大小。 不過,如果您的數據表是在iOS設計工具、介面產生器中建立,或者如果數據表具有固定的數據列高度,您必須手動啟用自我重設大小單元格,如本指南所述。

iOS 設計工具中的儲存格版面配置

開啟您想要在 iOS 設計工具中自動重設資料列大小之資料表檢視的分鏡腳本,選取單元格的 原型 並設計單元格的配置。 例如:

單元格的原型設計

針對原型中的每個元素,新增條件約束,讓元素保持正確位置,因為表格檢視會針對旋轉大小或不同的 iOS 裝置螢幕大小重設大小。 例如,將 Title 釘選到儲存格 內容檢視的頂端、左和右方:

將標題釘選到儲存格內容檢視的上方、左和右方

在我們的範例數據表中,小型 Label (下 Title) 是可以縮小和成長以增加或減少數據列高度的欄位。 若要達到此效果,請新增下列條件約束來釘選卷標的左、右、上和下:

這些條件約束可釘選標籤的左、右、上和下

既然我們已經完全限制單元格中的元素,我們需要釐清應該延展哪一個專案。 若要這樣做,請在 Properties Pad 的 [版面配置] 區段中,視需要設定內容擁抱優先順序內容壓縮抗拒優先順序

Properties Pad 的版面配置區段

設定您想要展開的專案 具有較低的 Hugging Priority 值,以及 較低的 [壓縮阻力優先順序] 值。

接下來,我們需要選取單元格原型,併為其提供唯 一標識碼

為儲存格原型提供唯一標識碼

在我們的範例中, GrowCell為 。 我們稍後會在填入數據表時使用此值。

重要

如果您的數據表包含一個以上的儲存格型態(原型),您必須確保每個類型都有自己的唯 Identifier 一類型,自動資料列重設大小才能運作。

針對 Cell 原型的每個元素,指派 Name 以將它公開至 C# 程式代碼。 例如:

指派 Name 以將它公開給 C# 程式代碼

接下來,新增 、 UITableViewControllerUITableView 和 (原型) 的UITableCell自訂類別。 例如:

為 UITableViewController、UITableView 和 UITableCell 新增自定義類別

最後,若要確保標籤中顯示所有預期的內容,請將 Lines 屬性設定為 0

Lines 屬性設定為 0

定義UI之後,讓我們新增程式代碼以啟用自動資料列高度重設大小。

啟用自動重設大小高度

在資料表檢視的數據來源 () 或 [來源] 中UITableViewDatasourceUITableViewSource,當我們清除資料格時,我們需要使用Identifier我們在設計工具中定義的 。 例如:

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;
}

根據預設,[數據表檢視] 會針對 [自動重設大小數據列高度] 設定。 若要確保這一點, RowHeight 屬性應該設定為 UITableView.AutomaticDimension。 我們也需要在 中UITableViewController設定 EstimatedRowHeight 屬性。 例如:

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 ();
}

此估計值不一定精確,只是數據表檢視中每個數據列平均高度的粗略估計。

在此程式代碼就緒后,當應用程式執行時,每個數據列都會根據數據格原型中最後一個標籤的高度來縮小和成長。 例如:

範例數據表執行