Ограничения для ImageView не работают

#ios #uiimageview #autolayout #uicollectionview #uicollectionviewcell

#iOS #uiimageview #автоматическое описание #uicollectionview #uicollectionviewcell

Вопрос:

Я использовал AutoLayout с одним из моих UICollectionView , я столкнулся с проблемой с высотой и шириной для ImageView. Я добавил UIImageView в свой UICollectionViewCell подобный список следующие ограничения.

введите описание изображения здесь

UICollectionViewDataSource методы.

 func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return 100
}

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

    var width = Int((collectionView.frame.size.width - 30) / 4)
    if width % 2 != 0 {
        width  = 1
    }        
    return CGSize(width: CGFloat(width), height: CGFloat(width))
}

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("Cell", forIndexPath: indexPath) as! CustomCell
    print("Cell Size - (cell.bounds)")
    print("ImageView Size - (cell.imageView.frame)")
    return cell
}
  

Но когда я запускаю это ImageView , оно всегда появляется 70X70 независимо от того, на каком устройстве я буду работать, но UICollectionViewCell размер увеличивается и уменьшается на разных устройствах.

На iPhone 6 это будет выглядеть так, как показано ниже.

введите описание изображения здесь

Я установил backgroundColor UIImageView для белого цвета и красного цвета UICollectionViewCell , чтобы дать тестеру представление о журнале консоли для ячейки, а размер изображения, как показано ниже.

 Cell Size - (0.0, 0.0, 86.0, 86.0)
ImageView Size - (5.0, 5.0, 70.0, 70.0)
Cell Size - (0.0, 0.0, 86.0, 86.0)
ImageView Size - (5.0, 5.0, 70.0, 70.0)
  

Пожалуйста, кто-нибудь поможет мне, почему размер ImageView не увеличивается или не уменьшается в зависимости от UICollectionViewCell . Любая помощь будет оценена.

Комментарии:

1. почему x и y … я думаю, в этом нет необходимости???

2. @EICaptainv2.0 Я уже пробовал и без этого, но это не сработает.

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

4. @CarienvanZyl Не понимаю, что вы пытаетесь сказать.

5. В разделе ограничений под визуальным представлением ограничений находится элемент управления сегментом между All и этим классом Size . Если вы определяете ограничения только для этого класса размеров, они также не применяются к другим классам размеров. Если вы откроете ограничение, установленный не будет проверен, но класс одного размера, например. wR hC может быть проверен. См . developer.apple.com/library/content/documentation /.

Ответ №1:

в инспекторе размеров представления коллекции установите для размера оценки значение None

Комментарии:

1. Как это было просто! Но потребовалось так много часов, чтобы найти его.

Ответ №2:

После небольшого исследования я придумал следующий способ решения этой проблемы AutoLayout с UICollectionViewCell помощью . Из Xcode 6 CollectionViewCell не отображается contentView in interface builder, поэтому в awakeFromNib ячейке of я установил его autoresizingMask , и он работает как шарм.

 class CustomCell: UICollectionViewCell {
  @IBOutlet
  var imageView: UIImageView!

    override func awakeFromNib() {
      super.awakeFromNib()
      //Below line solved my problem
      self.contentView.autoresizingMask = [.FlexibleWidth, .FlexibleHeight]
    }
}
  

Ответ №3:

вам необходимо установить ограничения, как показано на скриншоте ниже;введите описание изображения здесь

Комментарии:

1. Я уже добавил эти ограничения с 5 пробелами сверху, снизу, слева и справа, проверьте вопрос еще раз.

2. да, это проблемы с ограничениями, поэтому вам нужно удалить все существующие ограничения и установить только 4 ограничения, как показано на скриншоте выше.

3. в каком комментарии вы должны это объяснить?

4. Прочитайте первый вопрос, который уже был предложен El capitan, и я также ответил на это.

Ответ №4:

Ограничений по центру по горизонтали и центру по вертикали не должно быть, если для вашего представления изображения были указаны все стороны (верхняя, нижняя, начальная и конечная), прикрепленные к родительскому элементу.

Либо удалите ограничения по центру по горизонтали и центру по вертикали, либо сверху, снизу, впереди и сзади и укажите равные ширины и высоты в качестве родительских, а также по центру по вертикали и горизонтали.

Кажется, удаление ограничений по центру по горизонтали и центру по вертикали наверняка решит вашу проблему, попробуйте.

Надеюсь, это поможет. Удачи.

Комментарии:

1. Я уже пробовал это проверить во втором комментарии к вопросу.

2. Я уже пробовал использовать равную ширину и равную высоту, единственное решение, которое мне помогает, — это установка маски автоматического изменения для contentView из CollectionViewCell.

3. Ооо, в любом случае, наконец-то нашел решение. вот что важно 🙂