#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:
Я решил проблему. Мне нужно установить ограничение ширины, но я не хочу устанавливать. Я решаю этот путь
-
Перейдите в файл xib и установите ограничение ширины
-
Перейдите в инспектор размеров и выберите, что вы создали ограничение ширины
-
Установите идентификатор, например, «myConstraint»
-
Откройте файл ячейки и определите IBOutlet
for constraint in self.containerView.constraints { if constraint.identifier == "myConstraint" { constraint.constant = UIScreen.main.bounds.size.width * 0.70 } } containerView.layoutIfNeeded()
Я добавил изображение, о котором упоминал