Най-добри практики за задаване на ограничения за ширина и височина на автоматично оформление за клетка за изглед на колекция?

Проектирам потребителския интерфейс на приложение за ios 8, което се изгражда бързо. Имам междинни познания за автоматично оформление и ограничения. Ето моята ситуация: имам персонализиран контролер за изглед на колекция и клетка за изглед на колекция. Искам да използвам ограниченията „равни ширини“ и „равни височини“ в създателя на интерфейс, за да задам ширината и височината на клетка спрямо множител на родителския изглед – за разлика от използването на присъщи свойства на височина/широчина като 320 x 94.

Ето какво пробвах

  1. използване на присъща ширина и височина за класове размер в рамките на IB. (Това не работи)
  2. Control-Dragging от 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