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 的 [版面配置] 區段中,視需要設定內容擁抱優先順序和內容壓縮抗拒優先順序:
設定您想要展開的專案 具有較低的 Hugging Priority 值,以及 較低的 [壓縮阻力優先順序] 值。
接下來,我們需要選取單元格原型,併為其提供唯 一標識碼:
在我們的範例中, GrowCell
為 。 我們稍後會在填入數據表時使用此值。
重要
如果您的數據表包含一個以上的儲存格型態(原型),您必須確保每個類型都有自己的唯 Identifier
一類型,自動資料列重設大小才能運作。
針對 Cell 原型的每個元素,指派 Name 以將它公開至 C# 程式代碼。 例如:
接下來,新增 、 UITableViewController
UITableView
和 (原型) 的UITableCell
自訂類別。 例如:
最後,若要確保標籤中顯示所有預期的內容,請將 Lines 屬性設定為 0
:
定義UI之後,讓我們新增程式代碼以啟用自動資料列高度重設大小。
啟用自動重設大小高度
在資料表檢視的數據來源 () 或 [來源] 中UITableViewDatasource
UITableViewSource
,當我們清除資料格時,我們需要使用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 ();
}
此估計值不一定精確,只是數據表檢視中每個數據列平均高度的粗略估計。
在此程式代碼就緒后,當應用程式執行時,每個數據列都會根據數據格原型中最後一個標籤的高度來縮小和成長。 例如: