Automatická změna velikosti výšky řádku v Xamarin.iOS
Upozornění
Návrhář pro iOS byl v Visual Studio 2019 verze 16.8 a Visual Studio 2019 pro Mac verze 8.8 zastaralý a odebrán v Visual Studio 2019 verze 16.9 a Visual Studio pro Mac verze 8.9. Doporučený způsob vytváření uživatelských rozhraní pro iOS je přímo na Macu, na kterém běží Tvůrce rozhraní Xcode. Další informace najdete v tématu Návrh uživatelských rozhraní pomocí Xcode.
Od iOS 8 přidal Apple možnost vytvořit zobrazení tabulky (UITableView
), které může automaticky zvětšit a zmenšit výšku daného řádku na základě velikosti obsahu pomocí automatického rozložení, tříd velikostí a omezení.
iOS 11 přidal možnost automatického rozbalení řádků. Záhlaví, zápatí a buňky teď můžou mít na základě jejich obsahu automaticky velikost. Pokud je ale tabulka vytvořená v iOS Designeru, Tvůrci rozhraní nebo pokud má pevnou výšku řádků, musíte ručně povolit buňky s vlastní velikostí, jak je popsáno v této příručce.
Rozložení buňky v iOS Designeru
Otevřete scénář pro zobrazení tabulky, pro které chcete mít automatickou velikost řádku v iOS Designeru, vyberte prototyp buňky a navrhujte rozložení buňky. Příklad:
Pro každý prvek v prototypu přidejte omezení, která zachovávají prvky ve správném umístění, protože zobrazení tabulky se změní na otočení nebo různé velikosti obrazovky zařízení s iOSem. Například připnutí Title
k horní, levé a pravé části zobrazení obsahu buňky:
V případě naší ukázkové tabulky je malé Label
(pod Title
) pole, které může zmenšit a zvětšit, aby se zvětšila nebo zmenšila výška řádku. Chcete-li dosáhnout tohoto efektu, přidejte následující omezení pro připnutí levé, pravé, horní a dolní části popisku:
Teď, když jsme plně omezili prvky v buňce, musíme objasnit, který prvek by se měl roztáhnout. Chcete-li to provést, nastavte prioritu řazení obsahu a prioritukomprese obsahu podle potřeby v části Rozložení na panelu Vlastností:
Nastavte prvek, který chcete rozbalit, aby měl nižší hodnotu Priorita huggingu a nižší hodnotu Priority komprese.
Dále musíme vybrat prototyp buňky a dát mu jedinečný identifikátor:
V případě našeho příkladu . GrowCell
Tuto hodnotu použijeme později při naplnění tabulky.
Důležité
Pokud tabulka obsahuje více než jeden typ buňky (Prototyp), musíte zajistit, aby každý typ obsahoval vlastní jedinečný typ Identifier
pro automatické změny velikosti řádků.
Pro každý prvek prototypu buňky přiřaďte název , který ho zpřístupní kódu jazyka C#. Příklad:
Dále přidejte vlastní třídu pro UITableViewController
, UITableView
a UITableCell
(prototyp). Příklad:
Nakonec se ujistěte, že se v popisku zobrazí veškerý očekávaný obsah, nastavte vlastnost Řádky na 0
:
S definovaným uživatelským rozhraním přidáme kód, který povolí změnu velikosti automatické výšky řádku.
Povolení automatické změny velikosti výšky
V zdroji dat () nebo zdroji tabulky () nebo ve zdroji (UITableViewDatasource
UITableViewSource
) musíme použít Identifier
buňku, kterou jsme definovali v návrháři. Příklad:
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;
}
Ve výchozím nastavení bude zobrazení tabulky nastaveno pro automatickou změnu velikosti výšky řádku. Aby bylo zajištěno, RowHeight
měla by být vlastnost nastavena na UITableView.AutomaticDimension
. Musíme také nastavit EstimatedRowHeight
vlastnost v naší UITableViewController
. Příklad:
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 ();
}
Tento odhad nemusí být přesný, pouze hrubý odhad průměrné výšky každého řádku v zobrazení tabulky.
Když se spustí tento kód, každý řádek se zmenší a zvětší na základě výšky posledního popisku v prototypu buňky. Příklad: