Я должен был сделать это в Xamarin / C #. У меня был UITableViewCell
с некоторыми CAShapeLayers
для границ. Все вышеперечисленные параметры (включая копирование массива и последующее удаление слоев вызвали сбой). Подход, который работал для меня:
При добавлении CALayer
я дал ему имя:
var border = new CALayer();
border.BackgroundColor = color.CGColor;
border.Frame = new CGRect(x, y, width, height);
border.Name = "borderLayerName";
Layer.AddSublayer(border);
В PrepareForReuse
на UITableViewCell
я создал копию свойства SubLayers
и удалил все, что соответствовало имени, которое я назначил ранее:
CALayer[] copy = new CALayer[Layer.Sublayers.Length];
Layer.Sublayers.CopyTo(copy, 0);
copy.FirstOrDefault(l => l.Name == "borderLayerName")?.RemoveFromSuperLayer();
Нет сбоев.
Надеюсь, это поможет!