UITableViewCell滚动视图

时间:2016-06-01 18:59:45

标签: ios swift uitableview uiscrollview

我有一个带有滚动视图的表格视图单元格,用于滚动图像。我有几个问题。

当显示表格视图时,带有滚动视图和图像的单元格显示第一个图像和第二个图像的一部分,并且分页不起作用,它允许您向任何方向滚动。

enter image description here

一旦我滚过这个单元格,然后滚动回到它,它就会正确显示,并且分页就像它应该的那样。

enter image description here

在cellForRowAtIndexPath()

if indexPath.section == 0 {
            let imageCell = tableView.dequeueReusableCellWithIdentifier("imageCell", forIndexPath: indexPath) as! ImageCell

            imageCell.selectionStyle = .None

            if imageFiles.count > 0 {

                if imageFiles.count == 1 {
                    imageCell.pageControl.hidden = true
                }

                imageCell.pageControl.numberOfPages = imageFiles.count
                imageCell.pageControl.currentPage = 0

                var index = 0
                for photo in imageFiles {
                    var frame = CGRect()
                    frame.origin.x = (imageCell.imageScrollView.frame.size.width * CGFloat(index))
                    frame.origin.y = 0
                    frame.size = CGSizeMake(imageCell.imageScrollView.frame.size.width, imageCell.imageScrollView.frame.size.height)

                    let imageView = UIImageView(frame: frame)
                    imageView.image = photo

                    imageCell.imageScrollView.addSubview(imageView)
                    imageCell.imageScrollView.contentSize = CGSizeMake(imageCell.imageScrollView.frame.size.width * CGFloat(imageFiles.count), imageCell.imageScrollView.frame.size.height)

                    index += 1
                }

            } else {
                imageCell.pageControl.hidden = true
                let imageView = UIImageView(frame: imageCell.imageScrollView.frame)
                imageView.image = UIImage(named: "placeholder")
                imageCell.imageScrollView.addSubview(imageView)
            }

我的自定义单元格:

import UIKit

class ImageCell: UITableViewCell, UIScrollViewDelegate {
    @IBOutlet weak var pageControl: UIPageControl!
    @IBOutlet weak var imageScrollView: UIScrollView!

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }

    override func setSelected(selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        // Configure the view for the selected state
    }

    func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
        let pageWidth =  scrollView.frame.size.width

        pageControl.currentPage = Int(scrollView.contentOffset.x / pageWidth)
    }
}

2 个答案:

答案 0 :(得分:1)

我使用的是SDWebImageDownloader。 viewDidLoad()下载要在滚动视图中使用的图像,但我没有重新加载表视图数据。一旦我补充说,这完全有效。

func downloadImages() {
        let downloader = SDWebImageDownloader.sharedDownloader()

        for imageURL in images {
            let url = NSURL(string: imageURL)
            downloader.downloadImageWithURL(url, options: SDWebImageDownloaderOptions.UseNSURLCache, progress: nil,
                                            completed: { (image, data, error, bool) -> Void in
                                                self.imageFiles.append(image)
                                                dispatch_async(dispatch_get_main_queue(), {
                                                    self.tableView.reloadData()
                                                })
            })
        }
    }

答案 1 :(得分:0)

你这样做:

frame.size = CGSizeMake(imageCell.imageScrollView.frame.size.width, imageCell.imageScrollView.frame.size.height)

我猜想,当您的视图最初加载时,imageScrollView尚未完全布局,因此它没有有效的大小。滚动远离这个细胞&视图完全加载后返回到它将导致滚动视图具有有效大小。

您应该验证imageScrollView具有您认为的宽度,如果没有,则可以使用屏幕的宽度。

我在其中一个应用中实现了类似的功能,因此作为另一种可能的选择,您可以在其中放置CollectionView而不是在第一个单元格中放置滚动视图,并使用其填充您的集合视图图像细胞。这将A)允许您的布局随视图动态更改,而B)不是用所有图像加载滚动视图,而是可以根据需要动态加载它们。