Лучшие практики для установки ограничений ширины и высоты автоматического раскладки для ячейки представления коллекции?

Я разрабатываю пользовательский интерфейс приложения для iOS 8, которое создается быстро. Имею промежуточные знания об автопластике и ограничениях. Вот моя ситуация: у меня есть настраиваемый контроллер представления коллекции и ячейка представления коллекции. Я хочу использовать ограничения «равной ширины» и «равной высоты» в построителе интерфейса, чтобы установить ширину и высоту ячейки относительно множителя родительского представления - в отличие от использования внутренних свойств высоты / ширины, таких как 320 x 94.

Вот что я пробовал

  1. используя внутреннюю ширину и высоту для классов размеров в IB. (Это не работает)
  2. Перетаскивание с нажатой клавишей Control из UICollectionViewCell в CollectionView (не работало, поскольку «равная высота» и «равная ширина» даже не являются параметрами ограничения)

Должен ли я просто согласиться на внутреннюю высоту и ширину и предположить, что CollectionViewFlowLayout позаботится обо мне, или есть способ сделать это программно?

Спасибо. Алекс


person Alex P    schedule 07.12.2014    source источник
comment
Никто не знает ответа на этот вопрос. Создавать представления коллекций очень утомительно, и вы не можете предварительно просмотреть то, что редактируете.   -  person Francis Reynolds    schedule 10.07.2015


Ответы (2)


Используйте UICollectionViewDelegateFlowLayout методы, чтобы настроить размер ячейки

например, если вам нужно 3 ячейки по ширине просмотра

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
{
    let width = CGRectGetWidth(collectionView.bounds)
    let hcount = 3
    let gapcount = CGFloat(hcount) + 1
    //this should be a class var/constant which you can feed into the minimumLineSpacingForSectionAtIndex delegate
    let gap = 10 
    let kwidth = width - gap
    let keywidth = kwidth/CGFloat(hcount)

    return CGSize(width:keywidth,height:50)
}

Вы можете настроить расстояние между ячейками с помощью

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat

и краевые вставки с

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAtIndex section: Int) -> UIEdgeInsets

person Warren Burton    schedule 07.12.2014

Макет и размер ячеек задаются свойством collectionViewLayout объекта collectionView. Используя collectionViewLayout класса UICollectionViewFlowLayout, вы можете установить фиксированный размер с помощью свойства размера элемента:

(collectionView.collectionViewLayout as? UICollectionViewFlowLayout)?.itemSize = 100 //set fixed size here

или установите переменный размер с помощью метода делегата:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    // determine variable size here using indexPath value
}
person Jože Ws    schedule 19.05.2017