我有一个字符串列表,我需要在UITableView
中显示。他们必须有不同的layouts
,所以我制作了4个不同的TableViewCells
。在GetCell
中,我检查项目的类型(例如,列表项是“h_Head
”)并返回相应的单元格。有些条目很长,占用两行。问题是他们被剪掉了。当它最初加载时,一切都很好。当我滚过多行字符串并向上滚动时,它们会被切断。 Initial load After scrolling past it and back up
这是我的代码:
public override UITableViewCell GetCell (UITableView tableView, Foundation.NSIndexPath indexPath) {
BaseChecklistTableViewCell cell;
var item = dict [indexPath.Row];
string[] data = item.Split ('_');
var type = data [0];
var content = data [1];
cell = tableView.DequeueReusableCell (new NSString ("NormalTableViewCell")) as BaseChecklistTableViewCell;
//indented cell
if (type.Equals ("i") && (cell == null || !cell.Key.Equals ("IndentTableViewCell"))) {
cell = IndentTableViewCell.Create ();
//normal cell
} else if (type.Equals ("n") && (cell == null || !cell.Key.Equals ("NormalTableViewCell"))) {
cell = NormalTableViewCell.Create ();
//header cell
} else if (type.Equals ("h") && (cell == null || !cell.Key.Equals ("HeadTableViewCell"))) {
cell = HeadTableViewCell.Create ();
//title cell
} else if (cell == null || !cell.Key.Equals ("TitleTableViewCell")) {
cell = TitleTableViewCell.Create ();
}
cell.setData (content);
return cell;
}
public override nfloat GetHeightForRow (UITableView tableView, NSIndexPath indexPath) {
string item = dict [indexPath.Row];
SizeF size = new SizeF ((float)tableView.Bounds.Width - 40, float.MaxValue);
nfloat height = UIStringDrawing.StringSize (item, UIFont.FromName("DINPro-Regular", 15), size, UILineBreakMode.WordWrap).Height + 20;
return height;
}
答案 0 :(得分:1)
您的UITableView
标准高度为44像素,这是向上滚动时的显示高度。
您可以尝试设置:
TableView.RowHeight = UITableView.AutomaticDimension;
这样做的条件是你正在使用约束。
这应该使TableCell
通用的高度成为可能。无需每次都设置高度属性。