Nano Hash - криптовалюты, майнинг, программирование

Как установить динамическую высоту ячейки UICollectionView?

Как установить динамическую высоту ячейки?

Мне нужно установить размер ячейки в этом методе:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

Я пытаюсь сделать это:

cell.bounds = CGRect(x: cell.bounds.origin.x, y: cell.bounds.origin.y, width: width, height: height) 

но тогда я не могу прокрутить вниз ...

и я пробую этот метод:

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

но сначала вызывается этот метод, а затем вызывается этот метод:

cell.bounds = CGRect(x: cell.bounds.origin.x, y: cell.bounds.origin.y, width: width, height: height) 

так .. как изменить высоту ячейки?


Ответы:


1

Во-первых, настройте его как обычно. (обычные ограничения [слева, справа, сверху, снизу и по высоте] и IBOutlet для UICollectionView.

Во-вторых, создайте IBOutlets для ограничения высоты, ограничения сверху и ограничения снизу.

В-третьих, добавьте ->

//these are the outlets I am naming generic names but name them what you wish

 IBOutlet var collectionViewCellDynamicConstraint: NSLayoutConstraint!
 IBOutlet var topConstraintDynamicConstraint: NSLayoutConstraint!
 IBOutlet var bottomConstraintDynamicConstraint: NSLayoutConstraint!

 //into viewDidLoad

 collectionViewCell.addObserver(self, forKeyPath: "contentHeight",      options:NSKeyValueObservingOptions.New, context: nil)

  topConstraintDynamicConstraint.addObserver(self, forKeyPath: "contentTop", options:NSKeyValueObservingOptions.New, context: nil)

  bottomConstraintDynamicConstraint.addObserver(self, forKeyPath: "contentBottom", options:NSKeyValueObservingOptions.New, context: nil)

 //create this override func

 override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {



 //try use this segment below as well but if it doesn't work then remove it and try run again

 self.collectionViewCell.sizeThatFits()

 //



 self.collectionViewCellDynamicConstraint.constant = collectionViewCell.sizeThatFits(CGSizeMake(self.collectionViewCell.frame.size.width, CGFloat.max)).height

 // set these values (below) to the space/value that you set them at normally. Often what is needed is a refresh after changing the height of the view/collectionViewCell

    self.topSpaceOld.constant = 0.4 

    self.bottomSpaceOld.constant = 10


}




 // you need to de-initialise them before you leave the view or else it will crash
deinit {
    self.collectionViewCell.removeObserver(self, forKeyPath: "contentHeight")

    self.topConstraintDynamicConstraint.removeObserver(self, forKeyPath: "contentTop"

    self.bottomConstraintDynamicConstraint.removeObserver(self, forKeyPath: "contentBottom")
 )



}

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

28.01.2016
  • Привет, этот ответ помог тебе вообще? Если это сработало, пожалуйста, убедитесь, что это был правильный ответ 29.01.2016

  • 2

    Вы можете изменить размер своей ячейки с помощью метода делегата sizeForItemAtIndexPath при использовании, как показано ниже. Вам нужно вернуть CGSize для ячейки. Можете ли вы показать нам полный код вашей реализации этого метода?

    Рабочий пример;

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
    {
        return CGSizeMake(width, height);
    }
    
    28.01.2016
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..