Размеры ячеек UICollectionView

Был дан ответ на вопрос Stackoverflow https://stackoverflow.com/a/13555814/1678391 об установке ячеек переменного размера в UICollectionViewController. Я пытаюсь понять, как это сделать с объектом UICollectionView, содержащимся в UIViewController. GetSizeForItem - это то, что мне нужно, но я не вижу, где его взять.

Моя реализация добавляет UICollectionView в мой UIViewController через Xcode. В моем коде я делаю следующее;

public partial class CustomViewController : UIViewController
{
    public override void ViewDidLoad()
    {
        collectionView.RegisterClassForCell(typeof(MyCell), cellId);
    }

    public override void ViewWillAppear(bool animated)
    {
        collectionView.Source = new CollectionViewSource(items, cellId);
    }

    class CollectionViewSource : UICollectionViewSource
    {
    }

    class MyCell : UICollectionViewCell
    {
    }
}

person Vincent    schedule 10.03.2013    source источник


Ответы (1)


Согласно http://docs.go-mono.com/?link=M:MonoTouch.UIKit.UICollectionViewDelegateFlowLayout.GetSizeForItem GetSizeForItem доступен только для класса UICollectionViewDelegateFlowLayout.

Чтобы использовать этот метод, вы должны реализовать подкласс UICollectionViewDelegateFlowLayout и присвоить его свойству Delegate класса UICollectionViewController. Пример.

person Maxim Korobov    schedule 10.03.2013
comment
Однако я не использую UICollectionViewController. Просто UICollectionView внутри UIViewController. Возможна ли установка размера только при использовании UICollectionViewController? Спасибо - person Vincent; 11.03.2013
comment
Вы можете (stackoverflow .com/questions/14291889/). Попробуйте установить второй параметр в конструкторе UICollectionView или установить свойство CollectionViewLayout UICollectionView позже. - person Maxim Korobov; 11.03.2013
comment
Кажется, не удается вызвать подкласс делегата. flowLayoutDelegate = новый CollectionViewDelegateFlowLayout(); lineLayout = новый CollectionViewFlowLayout(); collectionView.RegisterClassForCell (typeof (MyCell), CellId); collectionView.CollectionViewLayout = lineLayout; collectionView.Delegate = flowLayoutDelegate; - person Vincent; 13.03.2013
comment
Вы создали базовый класс UICollectionViewDelegateFlowLayout, в котором используются значения по умолчанию. Вместо этого вы должны создать подкласс UICollectionViewDelegateFlowLayout и переопределить метод GetSizeForItem. - person Maxim Korobov; 13.03.2013
comment
В демонстрационных целях я разветвил официальный демонстрационный проект SimpleCollectionView (github.com/xamarin/monotouch -samples/tree/master/) и реализованный подкласс UICollectionViewDelegateFlowLayout. См. демонстрацию реализации и использования класса CustomFlowLayoutDelegate на странице bitbucket.org/MaximKorobov/. - person Maxim Korobov; 13.03.2013
comment
Мой код выше является подклассом UICollectionViewDelegateFlowLayout. Образец, показанный выше, основан на файле UICollectionViewController. Мой основан на UICollectionView. Я скачал и запустил ваш пример. Материал делегата - это в основном то, что я делаю. Я добавил представление к вашему образцу с тем, что я делаю. Я разместил его в Dropbox по адресу (dropbox.com/s/90isdyt9er438xa/CollectionViewSample.zip. ). - person Vincent; 13.03.2013
comment
У меня такая же проблема. Удалось ли вам решить эту проблему без использования UICollectionViewController? - person perfect_element; 24.11.2013