2016-06-25 4 views
16

Я пытаюсь реализовать CollectionView. Когда я использую Autolayout, мои ячейки не изменят размер, а их выравнивание.Как установить UICollectionViewCell Ширина и высота программно

Теперь я предпочел бы изменить их размеры, например.

//var size = CGSize(width: self.view.frame.width/10, height: self.view.frame.width/10) 

Я попытался установить в моем CellForItemAtIndexPath

collectionCell.size = size 

он не работает, хотя.

Есть ли способ достичь этого?

редактировать:

кажется, что ответы будут меняться только моя шириной CollectionView и сама высоту. Возможны ли конфликты в ограничениях? Есть идеи по этому поводу?

ответ

31

использовать этот метод, чтобы установить пользовательскую высоту ячейки шириной

Objective-C

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
    return CGSizeMake(CGRectGetWidth(collectionView.frame), (CGRectGetHeight(collectionView.frame))); 
} 

Swift

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: screenWidth, height: screenWidth); 
} 
+0

Я ищу Swift код. Я не уверен, как это сделать. – JVS

+0

проверить этот сейчас – PinkeshGjr

+0

как-то он не меняет мои ячейки, но больше похож на мой CollectionView – JVS

6

Вот что вы можете сделать, чтобы иметь диф ширина и высота ferent для ячейки относительно размера iPhone:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    var width = (self.view.frame.size.width - 12 * 3)/3 //some width 
    var height = width * 1.5 //ratio 
    return CGSize(width: width, height: height); 
} 

А может быть, вы должны также отключить ваши AutoLayout ограничения на ячейку для этого ответа на работу.

1

Попытка ниже метода

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: 100.0, height: 100.0) 
} 
3

Вид коллекция имеет макет объект. В вашем случае это, вероятно, раскладной расклад (UICollectionViewFlowLayout). Установите свойство расписания itemSize.

+0

Пробовал это. дает мне такую ​​же проблему, как раньше. так как мой CollectionView меняет размер, а не мои ячейки. – JVS

+2

Ну, все зависит от того, когда вы это сделаете. Вы не показали свой настоящий код, так кто знает, что вы делаете? Уверяю вас, он работает. – matt

15

Наконец-то получил ответ. Вы должны продлить UICollectionViewDelegateFlowLayout
Это должно быть работа с ответами выше.

+0

Не могли бы вы привести пример? –

1

Try ниже метода

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize { 
    return CGSize(width: 100.0, height: 100.0) 
} 
31

Убедитесь, что добавить протокол UICollectionViewDelegateFlowLayout в вашей class декларации

class MyCollectionViewController: UICollectionViewController, UICollectionViewDelegateFlowLayout 
{ 
    //MARK: - UICollectionViewDelegateFlowLayout 

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    { 
     return CGSize(width: 100.0, height: 100.0) 
    } 
} 
+0

Не забывайте использовать раскладку потока, а не обычай. Тогда твой единственный, который работал на меня. Благодаря! – Sean

-2

Это моя версия, вы найдете подходящее соотношение, чтобы получить размер ячейки согласно вашему требованию ,

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
{ 
return CGSizeMake(CGRectGetWidth(collectionView.frame)/4, CGRectGetHeight(collectionView.frame)/4); 
} 
0

Другим способом является, чтобы установить значение непосредственно в макете потока

let layout = collectionView.collectionViewLayout as! UICollectionViewFlowLayout 
    layout.itemSize = CGSize(width: size, height: size)