uicollectionview下拉调用哪个方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uicollectionview下拉调用哪个方法相关的知识,希望对你有一定的参考价值。
参考技术A 本示例程序最终运行界面的效果如下所示:创建UICollectionViewCell子类单元格
创建一个定制的UICollectionViewCell子类是另外一种方法,对单元格的样式和行为可以提供更大的控制程度。
首先,我们创建一个UICollectionViewCell的子类。选择File > New > File…菜单项,然后选择Cocoa Touch节点下的Objective-C Class 模板。
进一步设置类名称SimpleClass,设置为UICollectionViewCell的子类。
这样,将创建2个文件,分别为头文件和实现文件。
接下来,我们创建一个新的视图文件,和前面的操作方式基本一致,设置文件名称为SimpleLableCell(之前的视图文件为NibCell.xib)。
和前面的操作方式一样,我们删除默认的View视图,添加Collection View Cell对象到画布中。另外设置背景色为绿色,尺寸大小为100×100,当然还放置一个Label标签。
打开SimpleLabelCell.xib文件,在Indentity inspector面板窗口,设置Class属性为SimpleCell,这个是我们前面创建的UICollectionViewCell子类。
在Attributes inspector面板窗口,设置Identifier属性为simpleCell,后面的代码中会用到这一标识符。
现在,我们建立SimpleLableCell.xib视图文件中Label标签到视图控制器中的输出口,输出口名为titleLabel。
#import <UIKit/UIKit.h>
@interface SimpleCell : UICollectionViewCell
@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
@end
未调用 UICollectionView 布局委托方法
【中文标题】未调用 UICollectionView 布局委托方法【英文标题】:UICollectionView layout delegate method not called 【发布时间】:2017-11-30 10:33:52 【问题描述】:我正在初始化一个UICollectionView
,如下所示,我想要不同部分的不同行距。
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.scrollDirection = UICollectionViewScrollDirection.Horizontal
var baseCollectionView = UICollectionView(frame: CGRectZero, collectionViewLayout: layout)
baseCollectionView.backgroundColor = UIColor.clearColor()
baseCollectionView.translatesAutoresizingMaskIntoConstraints = false
baseCollectionView.showsVerticalScrollIndicator = false
baseCollectionView.delegate = self
baseCollectionView.dataSource = self
然后定义布局方法如下,
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat
switch section
case 0:
return 10.0
case 1:
return 10.0
case 2 :
return 10.0
case 3:
return 10.0
case 4 :
return 0.0
case 5 :
return 0.0
case 6 :
return 0.0
case 7 :
return 0.0
default:
return 0.0
还有,
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat
switch section
case 0:
return 10.0
case 1:
return 10.0
case 2 :
return 10.0
case 3:
return 10.0
case 4 :
return 0.0
case 5 :
return 0.0
case 6 :
return 0.0
case 7 :
return 0.0
default:
return 0.0
还有其他委托,minimumInteritemSpacingForSectionAtIndex
被调用但 minimumLineSpacingForSectionAt
委托方法没有被调用,如何解决这个问题,我哪里错了?
我也遵守了委托协议。
class MyViewController: UIViewController , UICollectionViewDelegateFlowLayout , UICollectionViewDelegate , UICollectionViewDataSource
给你,
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize
switch section
case 0:
return CGSizeMake(140.0,self.contentView.frame.size.height)
case 1:
return CGSizeMake(140.0,self.contentView.frame.size.height)
case 2 :
return CGSizeMake(140.0,self.contentView.frame.size.height)
case 3 :
return CGSizeMake(140.0,self.contentView.frame.size.height)
case 4:
return CGSizeMake(self.contentView.frame.size.width,self.contentView.frame.size.height)
case 5:
return CGSizeMake(self.contentView.frame.size.width / 2.0,self.contentView.frame.size.height)
case 6:
return CGSizeMake(75.0, self.contentView.frame.size.height)
case 7:
return CGSizeMake(((self.contentView.frame.size.width - 40.0) / 3.0), 150.0)
default:
return CGSizeZero
对于所有其他人来说,实际上从我的服务器发送的显示设计正在用于设置各种常量。
【问题讨论】:
很难相信这是一个 live 代码...从语法上看,它似乎根本无法编译。 是什么让你有这种感觉?而且我只会发布我认为有必要获得答案的部分代码,而不是我的整个代码库! @AvinashSharma 最后的评论完全没有必要,也没有任何帮助。仅供参考,如果它们返回相同的东西,您可以将它们组合在一起。您还可以进行模式匹配...case 0...3: return 10
ad default: return 0
我已经写了我已经添加了所有需要的方法,如果我不实现该方法,我的单元格将根本不会出现
@AvinashSharma,也许您的集合视图中没有足够的单元格,这就是为什么它不需要调用 ...minimumLineSpacingForSectionAt:...
方法,就好像您没有足够的单元格至少 2行,行距无关紧要,因此系统不关心调用它。
【参考方案1】:
函数名在签名中没有Index
。
来自文档https://developer.apple.com/documentation/uikit/uicollectionviewdelegateflowlayout
函数签名是...
func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat
即minimumInteritemSpacingForSectionAt
不是minimumInteritemSpacingForSectionAtIndex
【讨论】:
感谢您指出这一点,虽然我最初的问题是minimumLineSpacingForSectionAt
没有被调用,但我将其更改为 minimumLineSpacingForSectionAtIndex
并且它有效,因为我使用的是 Swift 2.3 而不是 3.0 所以错误在于语法。您的回答帮助我进行了调查,非常感谢【参考方案2】:
你做过吗?
@interface YourViewController : UIViewController <UICollectionViewDelegate, UICollectionViewDataSource>
【讨论】:
【参考方案3】:您的代码正在运行,像这样更改
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat
【讨论】:
我给这个框架只是为了在框架设置正确之后进行初始化。以上是关于uicollectionview下拉调用哪个方法的主要内容,如果未能解决你的问题,请参考以下文章
如何调用 UICollectionview 的特定数据源方法?
未调用 UICollectionView 方法(collectionView cellForItemAt indexPath)
在实例化单元格之前调用 UICollectionView 委托方法?
如何在 UIView(不是 UITableView、UICollectionView、UIScrollView)上添加 Pull-to-refresh