使用图像上传Swift动态调整UICollectionViewCell的大小

时间:2017-02-12 07:02:06

标签: ios swift3 uicollectionview uicollectionviewcell

我想知道动态调整UICollectionViewCell维度的最佳方法(Swift 3)。我将异步图像上传到ViewController,它实现了UICollectionView的相应协议。图像的大小都不同,因此我需要在加载UIImageView数据后设置单元格尺寸。我愿意接受集合视图本身的布局选项,但首先我想让单元格尺寸正确。

我知道有一些帖子已经相似,但我想知道在Swift 3中这样做的最合适的方法,我还没有找到正确的方法。

是否可以在func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {}方法中动态调整大小?或者,加载整个视图时是否可以设置自动调整大小选项?

这是我目前的相关方法,CollectionView的所有静态大小调整:

override func viewDidLoad() {
        super.viewDidLoad()
        ExitNameLabel.text = exitName
        let layout:UICollectionViewFlowLayout = UICollectionViewFlowLayout()
        layout.itemSize = CGSize(width: 120 , height: 120)
        self.imagesCollectionView.setCollectionViewLayout(layout, animated: true)
        exitLocationDetails.text = exitLocation
        imagesCollectionView.delegate = self
        imagesCollectionView.dataSource = self
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
    {
        return imageUrls.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell:ImageCollectionViewCell = imagesCollectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! ImageCollectionViewCell

        if (images_cache[imageUrls[indexPath.row]] != nil) {
            cell.imageCell.image = images_cache[imageUrls[indexPath.row]]
        } else {
            loadImage(imageUrls[indexPath.row], imageview:cell.imageCell)
        }
        return cell
    }


    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 1
    }

    func collectionView(collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
        let screenSize: CGRect = UIScreen.main.bounds
        let width = screenSize.width
        return CGSize(width: CGFloat(width), height: imagesCollectionView.bounds.size.height)
    }

感谢您帮助iOS新手:)

1 个答案:

答案 0 :(得分:1)

试试这个

if (images_cache[imageUrls[indexPath.row]] != nil) {
    cell.imageCell.image = images_cache[imageUrls[indexPath.row]]
    cell.imageCell.contentMode = .scaleAspectFit
} else {
    loadImage(imageUrls[indexPath.row], imageview:cell.imageCell)
}