#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. Ооо, в любом случае, наконец-то нашел решение. вот что важно 🙂