Table Cell 中的 UICollection 视图在 Swift 3 中不显示图像
Posted
技术标签:
【中文标题】Table Cell 中的 UICollection 视图在 Swift 3 中不显示图像【英文标题】:UICollection View inside Table Cell does not show images in Swift 3 【发布时间】:2017-07-13 07:41:30 【问题描述】:我将 UICollectionView 放在主页的表格单元格中。每个类别行都有其内容图像。 但是,我的问题是,当我运行该应用程序时,每当我运行该应用程序时,第二行/第二类下的图像都不会显示。 单击更多按钮后,图像将显示,并将转到详细信息 UI。然后,我单击返回按钮并到达主页。此时,图像显示正常。 我尝试了很多代码,但我不知道哪里错了。
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,
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
谁能帮帮我?
【问题讨论】:
您的共享代码根本没有任何意义。您只是重新加载表格视图。分享你如何添加集合视图的代码。 @ridvankucuk,我上传了我的代码兄弟。请检查一下。 【参考方案1】:像下面这样编辑控制器,你调用了太多的 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)
【讨论】:
以上是关于Table Cell 中的 UICollection 视图在 Swift 3 中不显示图像的主要内容,如果未能解决你的问题,请参考以下文章
fo:table-cell AntennaHouse 中的 fo:block-container
ElementUI自定义组件——让table中的cell(单元格)可编辑
node_modules/@angular/material/table/cell.d.ts 中的错误 -Typescript 版本问题 angular