子类化 UICollectionView

Subclassing UICollectionView

有人知道如何在 Xamarin.iOS 中对 UICollectionView 进行子类化吗?

我试过了

public class MyCustomUICollectionView : UICollectionView
{

    [Export ("initWithFrame:")]
    public InfinitiveScrollingUICollectionView (CGRect frame) : base(frame)
    {
        // initialization
    }
}

但我明白了

The best overloaded method match for UIKit.UICollectionView.UICollection(Foundation.NSCoder) has some invalid arguments Argument #1 cannot convertCoreGraphics.CGRectexpression to typeFoundation.NSCoder`.

我也尝试使用 public InfinitiveScrollingUICollectionView () 但我得到

The type UIKit.UICollectionView does not contain a constructor that takes '0' arguments

我想覆盖 LayoutSubviews。或者 UICollectionViewController 应该用于这样的目的吗?

UICollectionView 没有接受单个 CGRect 的构造函数,所以你也必须传递一个布局:

public class MyCustomUICollectionView : UICollectionView
{
    public MyCustomUICollectionView(CGRect frame, UICollectionViewLayout layout) 
        : base(frame, layout)
    {
    }
}

如果你愿意,你也可以在内部创建布局,这样你就不必从外部传递它了:

public class MyCustomUICollectionView : UICollectionView
{
    private static readonly UICollectionViewLayout _layout;

    static MyCustomUICollectionView()
    {
        // Just an example
        _layout = new UICollectionViewFlowLayout();
    }

    public MyCustomUICollectionView(CGRect frame) : base(frame, _layout)
    {
    }
}