gpt4 book ai didi

ios - RFQuiltLayout 和 UICollectionView

转载 作者:行者123 更新时间:2023-12-01 17:40:24 25 4
gpt4 key购买 nike

我正在尝试使用 RFQuiltLayout和我的UICollectionView .

我的 CollectionView 在标准 UICollectionViewFlowLayout 下工作正常但它只是一个网格。我希望我的照片布局如图所示 here.

我无法理解在 UICollectionView 中使用自定义布局需要什么。

我正在以编程方式做所有事情。我没有使用任何 Interface Builder/NIB/Storyboards。

使用标准 FlowLayout 让 UICollectionView 进行布局很容易,但是当我尝试更改为 RFQuiltLayout 时,我遇到了以下错误:

'UICollectionView must be initialized with a non-nil layout parameter'

这似乎是一个常见错误,但其他问题的建议/答案都没有帮助我解决它。

所以这是我的代码的相关部分:

.h
@interface PFRootViewController : UIViewController <OFFlickrAPIRequestDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>
@property (strong, nonatomic) UICollectionView *collectionView;

.m
//UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];

//Used to use the above standard FlowLayout, but now trying to move to the below RFQuiltLayout

RFQuiltLayout* layout = (id)[self.collectionView collectionViewLayout];
layout.direction = UICollectionViewScrollDirectionVertical;
layout.blockPixels = CGSizeMake(100, 40);
self.collectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height) collectionViewLayout:layout];



self.collectionView.delegate = self;
self.collectionView.dataSource = self;

[self.collectionView registerClass:[PFUICollectionViewCell class] forCellWithReuseIdentifier:@"FlickrCell"];


//Only Layout delegate method i've implemented:
- (CGSize) blockSizeForItemAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row % 2 == 0)
return CGSizeMake(80, 40);

return CGSizeMake(40, 80);
}

我真的不知道我还需要做什么才能让这个工作正常进行。如果我只是删除 RFQuiltLayout 引用并取消注释我的 UICollectionViewFlowLayout alloc init 一切正常,尽管使用标准 FlowLayout。

因此,如果任何人都可以帮助我指出正确的方向,那就太好了,这应该很简单,但尝试开始工作真的很痛苦。 - UICollectionViews 不像 UITableViews 那样简单。

昨天我花了很多时间尝试为我的 UICollectionView 工作(包括 RFQuiltLayout)获得各种自定义布局,但没有任何成功。

任何帮助是极大的赞赏,

问候,
约翰

最佳答案

RFQuiltLayout* layout = (id)[self.collectionView collectionViewLayout];
在这里,您在初始化 Collection View 之前向 Collection View 询问布局对象,两行。与您注释掉的行进行比较:
//UICollectionViewFlowLayout *layout=[[UICollectionViewFlowLayout alloc] init];
您需要创建一个新的布局对象:
RFQuiltLayout* layout = [[RFQuiltLayout alloc] init];
然后将其分配给您的当前 View 。

查看存储库的自述文件,问题是您正在从 viewDidLoad 复制代码方法,它假定 Collection View 及其布局已从 Storyboard 中初始化。如果您在代码中创建 View ,则还需要创建布局。

关于ios - RFQuiltLayout 和 UICollectionView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21664555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com