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

Posted

技术标签:

【中文标题】使用图像上传 Swift 动态调整 UICollectionViewCell 的大小【英文标题】:Dynamically sizing UICollectionViewCell dynamically with image upload Swift 【发布时间】:2017-02-12 07:02:05 【问题描述】:

我想知道动态调整 UICollectionViewCell 尺寸的最佳方法(Swift 3)。我将异步图像上传到为 UICollectionView 实现适当协议的 ViewController。图像的大小都不同,因此我需要在加载 UIImageView 数据后设置单元格尺寸。我对 collectionview 本身的布局选项持开放态度,但首先我想让单元格尺寸正确。

我知道已经有一些类似的帖子,但我想知道在 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】:

试试这个

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)

【讨论】:

啊!我想到了。如果图像已被缓存或下载,则此方法有效。我需要的是在图像加载完成后调用self.imagesCollectionView.reloadData()。谢谢!

以上是关于使用图像上传 Swift 动态调整 UICollectionViewCell 的大小的主要内容,如果未能解决你的问题,请参考以下文章

如何在Swift中调整图像大小?

UILabel 动态调整大小 - Swift

UICollectionView - 在设备旋转上调整单元格大小 - Swift

Swift - 在标签中动态调整大小后动态调整视图大小

PHP图像动态调整大小和圆角图像

如何通过 Swift 使用 NSSlider 为 NSImage 类调整亮度?