Ios RFQuiltLayout和UICollectionView
我正在尝试将Ios RFQuiltLayout和UICollectionView,ios,objective-c,uikit,uicollectionview,uicollectionviewlayout,Ios,Objective C,Uikit,Uicollectionview,Uicollectionviewlayout,我正在尝试将RFQuiltLayout与我的UICollectionView一起使用 我的CollectionView与标准的UICollectionViewFlowLayout配合得很好,但它只是一个网格。我希望我的照片布局如图所示 我很难理解在UICollectionView中使用自定义布局需要什么 我在按程序做每件事。我没有使用任何界面生成器/NIB/故事板 使用标准FlowLayout将UICollectionView设置为布局很容易,但当我尝试更改为RFQuiltLayout时,遇到以
RFQuiltLayout
与我的UICollectionView
一起使用
我的CollectionView与标准的UICollectionViewFlowLayout
配合得很好,但它只是一个网格。我希望我的照片布局如图所示
我很难理解在UICollectionView中使用自定义布局需要什么
我在按程序做每件事。我没有使用任何界面生成器/NIB/故事板
使用标准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;
我真的不知道我还需要做些什么才能让它工作。如果我只是删除RFQuiltLayout引用并取消对UICollectionViewFlowLayout alloc init的注释,那么一切都可以工作,尽管使用的是标准的FlowLayout
因此,如果有人能帮我指出正确的方向,那将是很好的,这应该很简单,但尝试开始工作真的很痛苦。-UICollectionView不像UITableView那么简单
昨天我花了一天的大部分时间试图为我的UICollectionView工作(包括RFQuiltLayout)获得各种自定义布局,但没有成功
非常感谢您的帮助
问候,,
John
RFQuiltLayout*layout=(id)[self.collectionView collectionView布局]代码>
在这里,在初始化集合视图之前,您向集合视图询问布局对象。与您注释掉的行进行比较:
//UICollectionViewFlowLayout*布局=[[UICollectionViewFlowLayout alloc]init]代码>
您需要创建一个新的布局对象:
RFQuiltLayout*布局=[[RFQuiltLayout alloc]init]代码>
然后将其指定给当前视图
查看存储库的自述文件,问题在于您正在从viewDidLoad
方法复制代码,该方法假定集合视图及其布局已从故事板初始化。如果要在代码中创建视图,还需要创建布局。RFQuiltLayout*layout=(id)[self.collectionView collectionViewLayout]代码>
在这里,在初始化集合视图之前,您向集合视图询问布局对象。与您注释掉的行进行比较:
//UICollectionViewFlowLayout*布局=[[UICollectionViewFlowLayout alloc]init]代码>
您需要创建一个新的布局对象:
RFQuiltLayout*布局=[[RFQuiltLayout alloc]init]代码>
然后将其指定给当前视图
查看存储库的自述文件,问题在于您正在从viewDidLoad
方法复制代码,该方法假定集合视图及其布局已从故事板初始化。如果要在代码中创建视图,还需要创建布局。如果这样放置,很容易…:)让我试试这个解决方案,如果有效,我会标记为正确,谢谢。谢谢!看起来我已经完成了一半,我只是按照建议进行了alloc和init,并且我不再有nil布局错误,但是当我加载应用程序时,我的屏幕仍然是黑色的,如果我注释掉rfcoet行并使用我看到的平铺的标准流布局,有什么想法吗?-PS会在SO允许的情况下立即奖励我。事实上,当我成功使用标准流布局启动后动态设置collectionView的布局时,collectionView将变为空白,并且不会调用cellForItemAtIndexPath,不知道为什么!看起来你也需要把自己设定为布局的代表。我刚发现,伙计,我真是太蠢了!谢谢你的帮助,赏金马上就要颁发了。我真的不喜欢IB和故事板,它让示例代码很难理解!好吧,你这样说很容易…:)让我试试这个解决方案,如果有效,我会标记为正确,谢谢。谢谢!看起来我已经完成了一半,我只是按照建议进行了alloc和init,并且我不再有nil布局错误,但是当我加载应用程序时,我的屏幕仍然是黑色的,如果我注释掉rfcoet行并使用我看到的平铺的标准流布局,有什么想法吗?-PS会在SO允许的情况下立即奖励我。事实上,当我成功使用标准流布局启动后动态设置collectionView的布局时,collectionView将变为空白,并且不会调用cellForItemAtIndexPath,不知道为什么!看起来你也需要把自己设定为布局的代表。我刚发现,伙计,我真是太蠢了!谢谢你的帮助,赏金马上就要颁发了。我真的不喜欢IB和故事板,它让示例代码很难理解!
//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);
}