Как загрузить Xib в CollectionView, используя ограничение ширины в Swift?

#ios #swift #xcode

#iOS #swift #xcode

Вопрос:

У меня есть CollectionView следующим образом

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

Я вызываю разные 3 файла xib в ячейки, подобные этой

 collectionView.register(UINib(nibName: "OfficialVehicleHeader", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleHeaderCell")
collectionView.register(UINib(nibName: "OfficialVehicleMedium", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleMediumCell")
collectionView.register(UINib(nibName: "OfficialVehicleBottom", bundle: nil), forCellWithReuseIdentifier: "OfficialVehicleBottomCell")
  

Мой код макета CollectionView

 let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical
collectionView.setCollectionViewLayout(layout, animated: true)
layout.estimatedItemSize = UICollectionViewFlowLayout.automaticSize
  

В файле xib я установил ограничение (начальное, конечное, нижнее, верхнее как 0) в дополнение к ограничению высоты. Высота работает без проблем, но я не хочу устанавливать ограничение ширины. Потому что между экранами разные

Где я ошибся?

Ответ №1:

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

Вот мой пример кода о том, как это сделать:

 collectionView.translatesAutoresizingMaskIntoConstraints = false
    collectionView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
    collectionView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
    collectionView.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true
    collectionView.topAnchor.constraint(equalTo: view.topAnchor, constant: 140).isActive = true
    collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
  

настройки макета:

 layout.itemSize = CGSize(width: self.view.frame.width - 10, height: self.view.frame.height / 3)
  

Ограничения ячеек, которые можно изменять:

 cell.widthAnchor.constraint(equalTo: widthAnchor, constant: 0).isActive = true
        cell.heightAnchor.constraint(equalTo: heightAnchor, constant: 0).isActive = true
        cell.leftAnchor.constraint(equalTo: leftAnchor, constant: 0).isActive = true
        cell.rightAnchor.constraint(equalTo: rightAnchor, constant: 0).isActive = true
  

Ответ №2:

Я решил проблему. Мне нужно установить ограничение ширины, но я не хочу устанавливать. Я решаю этот путь

  1. Перейдите в файл xib и установите ограничение ширины

  2. Перейдите в инспектор размеров и выберите, что вы создали ограничение ширины

  3. Установите идентификатор, например, «myConstraint»

  4. Откройте файл ячейки и определите IBOutlet

     for constraint in self.containerView.constraints {
      if constraint.identifier == "myConstraint" {
        constraint.constant = UIScreen.main.bounds.size.width * 0.70
      }
    }
    containerView.layoutIfNeeded()
      

Я добавил изображение, о котором упоминал

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

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