- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我的 collectionView 遇到了问题。目前我的设置是有两个部分的设置。每个部分中的数据都是从某个数据库中提取的,然后基于这些相应的部分。
下面是我的主要 homeFeedController 的代码
class HomeFeedController: UICollectionViewController, UICollectionViewDelegateFlowLayout {
// let dropDownLauncher = DropDownLauncher()
let dispatchGroup = DispatchGroup()
var isFinishedPaging = false
var userLocation: CLLocation?
var allEvents = [Event]()
var eventKeys = [String]()
var featuredEvents = [Event]()
private let cellID = "cellID"
private let catergoryCellID = "catergoryCellID"
var images: [String] = ["gear1","gear4","snakeman","gear4","gear1"]
var images1: [String] = ["sage","sagemode","kyubi","Naruto_Part_III","team7"]
var featuredEventsHeaderString = "Featured Events"
var categories : [String] = ["Seize The Night","Seize The Day","21 & Up", "Friends Events"]
override func viewDidLoad() {
super.viewDidLoad()
// navigationItem.title = "Featured Events"
collectionView?.backgroundColor = .white
collectionView?.showsVerticalScrollIndicator = false
SVProgressHUD.dismiss()
grabUserLoc()
collectionView?.register(HomeFeedCell.self, forCellWithReuseIdentifier: cellID)
collectionView?.register(CategoryCell.self, forCellWithReuseIdentifier: catergoryCellID)
// reloadHomeFeed()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: false)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
// self.view.removeFromSuperview()
}
deinit {
NotificationCenter.default.removeObserver(self)
print("EventDetailViewController class removed from memory")
}
@objc func grabUserLoc(){
LocationService.getUserLocation { (location) in
guard let currentLocation = location else {
return
}
PostService.showEvent(for: currentLocation, completion: { [unowned self](events) in
self.allEvents = events
print("Event count in PostService Closure:\(self.allEvents.count)")
DispatchQueue.main.async {
// self.dynamoCollectionView.reloadData()
//self.dynamoCollectionViewTop.reloadData()
}
})
PostService.showFeaturedEvent(for: currentLocation, completion: { [unowned self] (events) in
self.featuredEvents = events
print("Event count in Featured Events Closure is:\(self.featuredEvents.count)")
DispatchQueue.main.async {
// self.dynamoCollectionView.reloadData()
// self.dynamoCollectionViewTop.reloadData()
}
}
)
print("Latitude: \(currentLocation.coordinate.latitude)")
print("Longitude: \(currentLocation.coordinate.longitude)")
}
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if indexPath.section == 0 {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellID, for: indexPath) as! HomeFeedCell
cell.sectionNameLabel.text = "Featured Events"
cell.featuredEvents = featuredEvents
return cell
}
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: catergoryCellID, for: indexPath) as! CategoryCell
cell.sectionNameLabel.text = categories[indexPath.item]
print(categories[indexPath.item])
print(indexPath.item)
cell.categoryEvents = allEvents
return cell
}
override func numberOfSections(in collectionView: UICollectionView) -> Int {
return 2
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
if section == 1{
return 4
}
return 1
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
if indexPath.section == 0 {
return CGSize(width: view.frame.width, height: 300)
}
return CGSize(width: view.frame.width, height: 290)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
if section == 0 {
return UIEdgeInsets(top: 5, left: 0, bottom: 10, right: 0)
}
return UIEdgeInsets(top: 0, left: 8, bottom: 0, right: 8)
}
在此主提要 Controller 中创建的单元格中的每个单元格都有 collectionViews,它们创建某种可滚动的网格布局。此外,每个单元格都会传递一个事件,其中包含渲染大部分单元格所需的信息。我的单元格的基本布局如下。
import UIKit
class CategoryCell: UICollectionViewCell, UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout {
private let cellID = "cellID"
var categoryEvents: [Event]?{
didSet{
categoryCollectionView.reloadData()
}
}
var titles: String? {
didSet {
guard let titles = titles else {
return
}
sectionNameLabel.text = titles
}
}
let sectionNameLabel : UILabel = {
let sectionNameLabel = UILabel()
sectionNameLabel.font = UIFont(name:"HelveticaNeue-Bold", size: 16.0)
return sectionNameLabel
}()
let categoryCollectionView: UICollectionView = {
let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .horizontal
let cv = UICollectionView(frame: .zero, collectionViewLayout: layout)
cv.backgroundColor = .clear
return cv
}()
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
guard let currentEventCount = categoryEvents?.count else{
return 0
}
return currentEventCount
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellID, for: indexPath) as! CategoryEventCell
cell.event = categoryEvents?[indexPath.item]
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: 200, height: frame.height - 30)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 14, bottom: 0, right: 14)
}
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
@objc func setupViews(){
backgroundColor = .clear
addSubview(categoryCollectionView)
addSubview(sectionNameLabel)
sectionNameLabel.anchor(top: topAnchor, left: leftAnchor, bottom: nil, right: nil, paddingTop: 0, paddingLeft: 14, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
categoryCollectionView.anchor(top: sectionNameLabel.bottomAnchor, left: leftAnchor, bottom: bottomAnchor, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
categoryCollectionView.delegate = self
categoryCollectionView.dataSource = self
categoryCollectionView.showsHorizontalScrollIndicator = false
categoryCollectionView.register(CategoryEventCell.self, forCellWithReuseIdentifier: cellID)
}
}
这个包含collectionView的单元格最终将一个特定的事件传递给一个单元格,该单元格最终获取渲染自身所需的内容。其代码如下。
import UIKit
import Firebase
import FirebaseDatabase
class CategoryEventCell: BaseRoundedCardCell {
var event: Event? {
didSet{
guard let currentEvent = event else {
return
}
guard let url = URL(string: currentEvent.currentEventImage) else { return }
backgroundImageView.af_setImage(withURL: url)
eventNameLabel.text = currentEvent.currentEventName.capitalized
}
}
public var backgroundImageView: CustomImageView = {
let firstImage = CustomImageView()
firstImage.clipsToBounds = true
firstImage.translatesAutoresizingMaskIntoConstraints = false
firstImage.contentMode = .scaleToFill
firstImage.layer.cornerRadius = 15
return firstImage
}()
let eventNameLabel : UILabel = {
let sectionNameLabel = UILabel()
sectionNameLabel.font = UIFont(name:"HelveticaNeue-Bold", size: 14.0)
return sectionNameLabel
}()
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
}
@objc func setupViews(){
backgroundColor = .clear
// setCellShadow()
addSubview(backgroundImageView)
addSubview(eventNameLabel)
backgroundImageView.setContentCompressionResistancePriority(UILayoutPriority(600), for: .vertical)
backgroundImageView.anchor(top: topAnchor, left: leftAnchor, bottom: eventNameLabel.topAnchor, right: rightAnchor, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
eventNameLabel.anchor(top: backgroundImageView.bottomAnchor, left: leftAnchor, bottom: bottomAnchor, right: nil, paddingTop: 0, paddingLeft: 0, paddingBottom: 0, paddingRight: 0, width: 0, height: 0)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
问题似乎是由于某种原因在应用程序启动时加载内容而导致,没有任何内容加载。但一旦我滚动,所有内容就开始加载。除此之外,有一个部分甚至根本不加载任何内容,而其他部分则加载任何内容。我希望所有单元格在我进入屏幕时而不是在滚动时加载其内容。如果这是一个菜鸟错误,我深表歉意,但这只是不符合我想要的方式。还有一次,用户界面实际上被锁定了。我当前的用户界面如下所示。任何帮助表示赞赏。这已经困扰我几个小时了
据我所知,当单元格位于 View 内时,collectionViews会加载,问题是在我向下或向上滚动(无论方向是什么)之前,它们都不会加载。
最佳答案
UICollectionView 的工作方式是,索引路径中的单元格安装仅在显示时才会出现。如果单元格不在可见 Collection View 之外。单元格将被 dqqued 重用于另一个索引。因此,当您在 cellForRowAtIndexPath
处获取每个单元格的数据时,不会创建所有单元格,只会创建可见单元格。
您可以利用 Collection View 预取功能在数据显示之前加载数据。
您可以引用预取 UICollectionView 的更多详细信息
https://www.captechconsulting.com/blogs/uicollectionview-prefetching-in-ios-10
关于ios - CollectionView 在滚动之前未加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49436321/
如果附加了 'not-scroll' 类,我希望我的 body 不滚动,否则它应该正常工作。 我已经搜索这个问题两天了,但找不到任何适合我的解决方案。 我想要的是向 body 添加一个 class,并
我发现似乎是 iOS Safari 中的错误(我正在 iOS 8 上进行测试)。当绝对定位的 iFrame 漂浮在一段可滚动内容上方时,滚动 iFrame 也会滚动下面的内容。以下 HTML (ava
我有以下代码来显示一系列投资组合图片,这些图片以 SVG 格式存储在滚动 div 中: 在 Safari 中滚动使用两根手指或鼠标滚轮当光标位于 SVG 之一上时不起作用。 该页
我想用 javascript 做的是: 一旦你向下滚动页面,将#sidebar-box-fixed 的位置从 position: relative; 更改为定位:固定;。改回position:rela
我对 Elasticsearch 的滚动功能有点困惑。在 elasticsearch 中,每当用户在结果集上滚动时,是否可以每次调用搜索 API?来自文档 "search_type" => "scan
我试图做到这一点,以便当我向上或向下滚动页面时,它会运行不同的相应功能。我发现了一个类似的问题here但我已经尝试了他们的答案并且没有运气。 注意:此页面没有正常显示的滚动条。没有地方可以滚动。 bo
(C语言,GTK库) 在我的表单上,我有一个 GtkDrawingArea 小部件,我在上面使用 Cairo 绘制 GdkPixbufs(从文件加载)。我想要完成的是能够在窗口大小保持固定的情况下使用
最近我一直在尝试创建一个拉到(刷新,加载更多)swiftUI ScrollView !!,灵感来自 https://cocoapods.org/pods/SwiftPullToRefresh 我正在努
我正在开发一个应用程序,其中有两个带有可放置区域的列表和一个带有可拖动项目的侧面菜单。 当我滚动屏幕时,项目的位置困惑。 我试图在谷歌上寻找一些东西,最后得到了这个问题:jQuery draggabl
我在 UIWebView 中加载了一个 HTML 表单,而我的 UIWebView 恰好从 View 的中间开始并扩展。我必须锁定此 webView 不滚动并将其放在 ScrollView 之上以允许
如何在每个元素而不是整个元素上应用淡入淡出(与其高度相比)? HTML: CSS: * { padding: 0; margin: 0; box-sizing: border
我想使用带有垂直轴的 PageView 并使用鼠标滚动在页面之间移动,但是当我使用鼠标滚动时页面不滚动...仅页面单击并向上/向下滑动时滚动。 有什么办法吗? 我想保留属性 pageSnapping:
我制作这个程序是为了好玩,但我被卡住了,因为程序在屏幕外运行。如何在不完全更改代码的情况下实现滚动条。 public static void main(String args[]) throws IO
我想使用带有垂直轴的 PageView 并使用鼠标滚动在页面之间移动,但是当我使用鼠标滚动时页面不滚动...仅页面单击并向上/向下滑动时滚动。 有什么办法吗? 我想保留属性 pageSnapping:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
使用 jquery 技术从 css-tricks.com 获得滚动/跟随侧边栏,如果您不知道我在说什么,这里是代码: $(function() { var $sidebar = $
我是 jQuery Mobile 新手。我需要向我的应用程序添加 Facebook 滑动面板功能。 我经历了 sliding menu panel ,它工作正常,但我在菜单面板中的内容超出了窗口大小,
有没有办法在 js 或 jQuery 或任何其他工具中检测 ctrl + 滚动。我正在尝试执行一些动态布局代码,我需要检测不同分辨率下的屏幕宽度,我通过使用 setTimeout() 的计时器实现了这
我有一部分html代码:
我想控制 RichTextBox 滚动,但在控件中找不到任何方法来执行此操作。 这样做的原因是我希望当鼠标光标位于 RichTextBox 控件上时鼠标滚轮滚动有效(它没有事件焦点:鼠标滚轮事件由表单
我是一名优秀的程序员,十分优秀!