表格单元格内的UICollection视图在Swift 3中不显示图像

编程入门 行业动态 更新时间:2024-10-25 08:23:48
本文介绍了表格单元格内的UICollection视图在Swift 3中不显示图像的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我将UICollectionView放在主页的表格单元内.每个类别行都有其内容图像. 但是,我的问题是,当我运行该应用程序时,无论何时运行该应用程序,第二行/第二类别下的图像都不会显示. 单击更多按钮后,图像将显示,并进入详细信息UI.然后,我单击后退"按钮并进入主页.此时,图像显示正确. 我尝试了很多代码,但是我不知道哪里出错了.

I put UICollectionView inside table cell in Home page. Each category row has their contents image. But, my problem is that when I run the app, the images under second row/second category do not show whenever I run the app. The images will show after I click more button and it will goes to details UI. Then, I click on Back button and reach the Home page. At this time, the images shows properly. I tried many codes but I don't know where it is wrong.

override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() tableView.reloadData() self.tableView.reloadData() self.tableView.layoutIfNeeded() } override func viewDidAppear(_ animated: Bool) { tableView.reloadData() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //getSearchWords() DispatchQueue.main.async { self.tableView.reloadData() } self.tableView.reloadData() self.tableView.layoutIfNeeded() } override func viewDidLoad() { DispatchQueue.main.async { self.tableView.reloadData() } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // debugPrint("HOme Table View Cell") let cell = tableView.dequeueReusableCell(withIdentifier: "homecell") as! HomeCategoryRowCell let list = sections[(indexPath as NSIndexPath).row] cell.setCollectionViewDataSourceDelegate(self, forRow: indexPath.row) cell.collectionViewOffset = self.storedOffsets[indexPath.row] ?? 0 DispatchQueue.main.async { cell.categoryTitle.text = list.package_name cell.mainAssociatedURL.text = list.package_url } cell.categoryTitle.font = UIFont.boldSystemFont(ofSize: 17.0) cell.collectionView.tag = indexPath.row cell.parentVC = self cell.collectionView.reloadData() return cell } extension Home : UICollectionViewDelegate, UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return sections[collectionView.tag].packageTable.count } func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "videoCell", for: indexPath) as! HomeVideoCell let list = sections[collectionView.tag].packageTable[indexPath.row] if(list.poster_image_url != StringResource().posterURL){ let url = NSURL(string: list.poster_image_url) do{ if let url = url { _ = try Data(contentsOf:url as URL) poster_url = list.poster_image_url } }catch let error { //debugPrint("ERRor ::\(error)") poster_url = StringResource().posterURL } }else{ poster_url = StringResource().posterURL } AsyncImageLoader.sharedLoader.imageForUrl(urlString: poster_url) { (image, url) -> () in DispatchQueue.main.async(){ cell.movieTitle.text = list.name if(url == StringResource().posterURL){ cell.imageView.image = UIImage(named: "sample_cover") }else{ cell.imageView.image = image } } } // cell.layer.shouldRasterize = true // cell.layer.rasterizationScale = UIScreen.main.scale return cell } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { print("Home Collection view at row \(collectionView.tag) selected index path \(indexPath)") let list = sections[collectionView.tag].packageTable[indexPath.row] self.prefs.set(list.poster_image_url, forKey: "poster_image_url") self.prefs.set(list.name, forKey: "name") self.prefs.set(list.assets_id, forKey: "VEDIO_ID") debugPrint(list.name) debugPrint(list.assets_id) } }

以上这些代码是用Home.swift编写的.

在 HomeCell.swift 中,

In HomeCell.swift,

class HomeCell : UITableViewCell { var parentVC: UIViewController? @IBOutlet weak var collectionView: UICollectionView! @IBOutlet weak var categoryTitle: UILabel! @IBOutlet weak var SeeAll: UIButton! @IBOutlet weak var mainAssociatedURL: UILabel! let prefs:UserDefaults = UserDefaults.standard var catId: String! = "" var associated_url: String! override func awakeFromNib() { super.awakeFromNib() SeeAll.setTitle(NSLocalizedString("See All >", comment: ""), for: .normal) SeeAll.titleLabel!.font = UIFont (name: "Tharlon", size: 14) } @IBAction func btnSeeAll(_ sender: Any) { catId = categoryTitle.text! associated_url = mainAssociatedURL.text! self.prefs.setValue(1, forKey: "PROVIDER_ID") self.prefs.set(catId, forKey: "PROVIDER_NAME") self.prefs.set(associated_url, forKey: "associated_url") } override func layoutSubviews() { super.layoutSubviews() collectionView.collectionViewLayout.invalidateLayout() } } extension HomeCategoryRowCell { func setCollectionViewDataSourceDelegate<D: UICollectionViewDataSource & UICollectionViewDelegate>(_ dataSourceDelegate: D, forRow row: Int) { self.collectionView.delegate = dataSourceDelegate self.collectionView.dataSource = dataSourceDelegate self.collectionView.tag = row self.collectionView.setContentOffset(self.collectionView.contentOffset, animated:false) // Stops collection view if it was scrolling. self.collectionView.reloadData() } var collectionViewOffset: CGFloat { get { return collectionView.contentOffset.x } set { collectionView.contentOffset.x = newValue } } }

有人可以帮我吗?

推荐答案

像下面这样编辑控制器,您调用了太多的reloadData.

Edit controller like below, you are calling too many reloadData.

override func viewWillLayoutSubviews() { super.viewWillLayoutSubviews() self.tableView.layoutIfNeeded() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) //getSearchWords() DispatchQueue.main.async { self.tableView.reloadData() } self.tableView.layoutIfNeeded() } override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self }

并添加:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { tableView .deselectRow(at: indexPath, animated: false) }

更多推荐

表格单元格内的UICollection视图在Swift 3中不显示图像

本文发布于:2023-11-26 20:22:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1635060.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:视图   中不   表格   图像   单元格内

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!