Я пытаюсь запустить приложение и решаю, использовать раскадровки или программировать все это программно. Я играю с проектами скачать из сети, чтобы решить.
Я использую UICollectionviews для отображения данных. Когда я открываю viewcontroller программно, все работает нормально, и ячейка отображает изображение отлично. Однако, когда я запускаю раскадровку и связываю контроллер представления в раскадровке с моим быстрым кодом файла, изображение представления коллекции меньше, чем весь экран, и как только я обновляю представление, изображение становится слишком большим для всего экрана, и я получаю этоошибка:
2019-11-09 11:14:02.087688+1300 testapp[22869:4508359] the item width must be less than the width of the UICollectionView minus the section insets left and right values, minus the content insets left and right values.
2019-11-09 11:14:02.087788+1300 testapp[22869:4508359] Please check the values returned by the delegate.
2019-11-09 11:14:02.088547+1300 testapp[22869:4508359] The relevant UICollectionViewFlowLayout instance is <UICollectionViewFlowLayout: 0x7f9c65d191e0>, and it is attached to <UICollectionView: 0x7f9c6602ee00; frame = (0 0; 414 808); clipsToBounds = YES; autoresize = W+H; autoresizesSubviews = NO; tintColor = UIExtendedSRGBColorSpace 0.357511 0.488406 0.724745 1; gestureRecognizers = <NSArray: 0x60000376f420>; layer = <CALayer: 0x600003947180>; contentOffset: {0, -60}; contentSize: {414, 565}; adjustedContentInset: {0, 0, 83, 0}; layout: <UICollectionViewFlowLayout: 0x7f9c65d191e0>; dataSource: <Storefront.HomeController: 0x7f9c65c0e180>>.
2019-11-09 11:14:02.092875+1300 testapp[22869:4508359] Make a symbolic breakpoint at UICollectionViewFlowLayoutBreakForInvalidSizes to catch this in the debugger.
Вот код для настройки viewview:
class HomeController: mycollectionViewController {
override func viewDidLoad() {
super.viewDidLoad()
collectionView?.backgroundColor = .white
collectionView?.register(imageCell.self, forCellWithReuseIdentifier: imageCell.cellId)
collectionView?.backgroundView?.alpha = 0
let refreshControl = UIRefreshControl()
refreshControl.addTarget(self, action: #selector(handleRefresh), for: .valueChanged)
collectionView?.refreshControl = refreshControl
fetchImages()
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return images.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: imageCell.cellId, for: indexPath) as! imageCell
if indexPath.item < images.count {
cell.image = images[indexPath.item]
}
cell.delegate = self
return cell
}
}
//MARK: - UICollectionViewDelegateFlowLayout
extension HomeController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let dCell = imageCell(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: 1000))
dCell.image = images[indexPath.item]
dCell.layoutIfNeeded()
var height: CGFloat = dCell.header.bounds.height
height += view.frame.width
height += 24 + 2 * dCell.padding
height += dCell.captionLabel.intrinsicContentSize.height + 8
return CGSize(width: view.frame.width, height: height)
}
}
Viewcontroller, с которым я связал этот код, является Collectionviewcontroller. Приложение не падает, я только получаю сообщение об ошибке, и представление коллекции меняет размеры.
Я ищу здесь решение, но ничего не работает. Я не вижу, что отличается от открытия этого контроллера с раскадровкой или программно?
, пожалуйста, помогите!