Xamarin.iOS
GetHeightForRow에서 변수 행 높이 계산
수색…
비고
더 많은 양의 데이터가있는 경우 행 높이 계산이 비쌀 수 있으며 스크롤링 성능이 저하 될 수 있습니다. 이 시나리오에서 UITableViewSource.EstimatedHeight(UITableView, NSIndexPath)
를 재정의하면 신속한 스크롤에 충분한 수를 신속하게 제공 할 수 있습니다 (예 :).
public override nfloat EstimatedHeight(UITableView tableView, NSIndexPath indexPath)
{
return 44.0f;
}
GetHeightForRow 사용하기
사용자 정의 행 높이를 설정하려면 UITableViewSource.GetHeightForRow(UITableView,NSIndexPath)
재정의하십시오.
public class ColorTableDataSource : UITableViewSource
{
List<DomainClass> Model { get; set; }
public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
var height = Model[indexPath.Row % Model.Count].Height;
return height;
}
//...etc ...
}
표의 도메인 클래스 (이 경우 3 개의 임의 색상 중 하나와 3 개의 임의 높이 중 1 개가 있음) :
public class DomainClass
{
static Random rand = new Random(0);
public UIColor Color { get; protected set; }
public float Height { get; protected set; }
static UIColor[] Colors = new UIColor[]
{
UIColor.Red,
UIColor.Green,
UIColor.Blue,
UIColor.Yellow
};
public DomainClass()
{
Color = Colors[rand.Next(Colors.Length)];
switch (rand.Next(3))
{
case 0:
Height = 24.0f;
break;
case 1:
Height = 44.0f;
break;
case 2:
Height = 64.0f;
break;
default:
throw new ArgumentOutOfRangeException();
}
}
public override string ToString()
{
return string.Format("[DomainClass: Color={0}, Height={1}]", Color, Height);
}
}
어떤 모습입니까?
다음은 기술을 시연하는 완전한 프로그램입니다.
using System;
using System.Collections.Generic;
using System.Linq;
using Foundation;
using UIKit;
using System.Drawing;
namespace SingleFileTableViewSolution
{
//Model
public class DomainClass
{
static Random rand = new Random(0);
public UIColor Color { get; protected set; }
public float Height { get; protected set; }
static UIColor[] Colors = new UIColor[]
{
UIColor.Red,
UIColor.Green,
UIColor.Blue,
UIColor.Yellow
};
public DomainClass()
{
Color = Colors[rand.Next(Colors.Length)];
switch (rand.Next(3))
{
case 0:
Height = 24.0f;
break;
case 1:
Height = 44.0f;
break;
case 2:
Height = 64.0f;
break;
default:
throw new ArgumentOutOfRangeException();
}
}
public override string ToString()
{
return string.Format("[DomainClass: Color={0}, Height={1}]", Color, Height);
}
}
//Table Source
public class ColorTableDataSource : UITableViewSource
{
List<DomainClass> Model { get; set; }
public ColorTableDataSource(List<DomainClass> model)
{
this.Model = model;
}
public override nint RowsInSection(UITableView tableView, nint section)
{
return 10000;
}
public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath)
{
var cell = tableView.DequeueReusableCell(ColoredTableCell.ID, indexPath);
cell.ContentView.BackgroundColor = Model[indexPath.Row % Model.Count].Color;
return cell;
}
public override nfloat GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
{
var height = Model[indexPath.Row % Model.Count].Height;
return height;
}
public override void CellDisplayingEnded(UITableView tableView, UITableViewCell cell, NSIndexPath indexPath)
{
Console.WriteLine("CellDisplayingEnded on {0}", indexPath);
}
}
public class ColoredTableCell : UITableViewCell
{
public static readonly NSString ID = new NSString("ColoredTableCell");
public static int ClassCount = 0;
public int myId = 0;
public ColoredTableCell()
{
}
public ColoredTableCell(IntPtr handle) : base(handle)
{
Console.WriteLine("New ColoredTableCell allocated {0} {1}", handle.ToInt64(), ClassCount++);
myId = handle.ToInt32();
}
~ColoredTableCell()
{
Console.WriteLine("ColoredTableCell {0} being finalized.", myId);
}
}
public class ColorTableController : UITableViewController
{
String title;
public ColorTableController(String title, UITableViewSource source) : base()
{
this.title = title;
this.TableView.Source = source;
this.TableView.RegisterClassForCellReuse(typeof(ColoredTableCell), ColoredTableCell.ID);
this.TableView.TableHeaderView = new UIView(new RectangleF(0, 0, 500, 200));
this.TableView.TableHeaderView.BackgroundColor = UIColor.Brown;
}
public override void DidReceiveMemoryWarning()
{
// Releases the view if it doesn't have a superview.
base.DidReceiveMemoryWarning();
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
Title = title;
}
}
[Register("AppDelegate")]
public class AppDelegate : UIApplicationDelegate
{
UIWindow window;
ColorTableController viewController;
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
var models = new List<DomainClass>();
for (int i = 0; i < 20; i++)
{
models.Add(new DomainClass());
}
var tableController = new ColorTableController("My Table", new ColorTableDataSource(models));
window = new UIWindow(UIScreen.MainScreen.Bounds);
window.RootViewController = tableController;
window.MakeKeyAndVisible();
return true;
}
}
public class Application
{
static void Main(string[] args)
{
UIApplication.Main(args, null, "AppDelegate");
}
}
}
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow