В настоящее время я разрабатываю приложение iOS с использованием рамки Monotouch (Xamarin).iOS - UITableView - Строки загадочно повторяются при прокрутке быстро? (simulator)
У меня есть собственный источник таблицы, в котором используются пользовательские ячейки, высота которых вычисляется динамически.
Когда я запускаю проект в симуляторе iOS, если я быстро прокручиваю его в нижнюю или верхнюю часть, верхняя ячейка заменяет нижнюю или наоборот - как если бы она неправильно рисовала или повторно использовала неправильную ячейку по ошибке?
Просто чтобы прояснить - если мои клетки
один два три четыре пять
Если я быстро прокручиваются сверху вниз, мои клетки появляются как
один два три один
Или, если я медленно прокрутите вниз, и клетку остаться в порядке, когда я быстро перейти к вершине я получить
пяти два три четыре пять
И если я прокрутку вверх и вниз спорадически, клетки могут беспорядочно перемешиваться.
Моего источник таблица выглядит следующим образом:
PostModel[] models;
string cellIdentifier = "FeedCell";
public FeedSource (PostModel[] items)
{
models = items;
}
public override int RowsInSection (UITableView tableview, int section)
{
return models.Length;
}
public override float GetHeightForRow (UITableView tableView, NSIndexPath indexPath)
{
FeedCell cell = this.GetCell (tableView, indexPath) as FeedCell;
var height = cell.height;
return height;
}
public override UITableViewCell GetCell (UITableView tableView, MonoTouch.Foundation.NSIndexPath indexPath)
{
FeedCell cell = tableView.DequeueReusableCell (cellIdentifier) as FeedCell;
//if there are no cells to reuse, create a new one
if (cell == null) {
cell = new FeedCell (models [indexPath.Row], new NSString (cellIdentifier));
cell.LayoutSubviews();
}
//cell.height = cell.height;
return cell;
}
Я слышал о проблемах с производительностью с динамическими высотами ячеек, но я только тестирование с 5 клетками, и это только кажется странным.
Может ли это быть моим симулятором iOS, и этого не произойдет на устройстве? Это можно как-то исправить?
Спасибо. Вместо того, чтобы инициализировать мою ячейку в качестве повторно используемой ячейки, я просто инициализировал ее нормально и вернул ее, и это решило проблему ... но почему повторяется контент, а не только размер? Невозможно повторно использовать ячейки с полностью динамическими высотами? –
@JasonMcGraw Я сделал это в Objective-C. Я могу только предположить, что это возможно в C#. Ячейка должна быть построена для изменения размера. –
@JasonMcGraw 'GetHeightForRow' необходимо определить высоту ячейки независимо от' GetCell'. Ячейка, возвращаемая 'GetCell', должна соответствовать высоте, возвращаемой' GetHeightForRow'. –