滚动

时间:2016-04-08 07:26:42

标签: c# ios uitableview xamarin xamarin.ios

我有一个字符串列表,我需要在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;
}

1 个答案:

答案 0 :(得分:1)

您的UITableView标准高度为44像素,这是向上滚动时的显示高度。

您可以尝试设置:

TableView.RowHeight = UITableView.AutomaticDimension;

这样做的条件是你正在使用约束。 这应该使TableCell通用的高度成为可能。无需每次都设置高度属性。