所以很有趣,我正在尝试使用 collectionViewLayout sizeForItemAtIndexPath
在 collectionView
中一次只显示一个项目并水平滚动,我试过这个:
- (void)viewDidLoad {
[super viewDidLoad];
flowLayout = [[UICollectionViewFlowLayout alloc]init];
flowLayout.scrollDirection = UICollectionViewScrollDirectionHorizontal;
flowLayout.minimumInteritemSpacing = 0.0;
flowLayout.minimumLineSpacing = 0.0;
_obj_CollectionView.pagingEnabled = YES;
_obj_CollectionView.collectionViewLayout = flowLayout;
self.obj_CollectionView.delegate = self;
self.obj_CollectionView.dataSource = self;
_obj_CollectionView.backgroundColor = [UIColor redColor];
}
-(CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
return CGSizeMake(collectionView.frame.size.width, collectionView.frame.size.height);
}
这是 collectionView 截图:
这里紫色是我的单元格,红色是我的 collectionView
但我想要整个紫色。
所以请指导我。我很迷惑。 :)
最佳答案
首先,您不需要以编程方式创建UICollectionViewFlowLayout
的对象。也不需要 viewDidLoad()
中编写的代码。您可以使用 storyboard
和 delegate
方法完成所有这些操作。
下面是你的问题的代码:
import UIKit
class ViewController: UIViewController
{
@IBOutlet weak var collectionView: UICollectionView!
override func viewDidLoad()
{
super.viewDidLoad()
}
}
extension ViewController : UICollectionViewDataSource
{
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
{
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell
{
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
cell.backgroundColor = (indexPath.item % 2 == 0) ? UIColor.purple : UIColor.blue
return cell
}
}
extension ViewController : UICollectionViewDelegateFlowLayout
{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
{
return CGSize(width: collectionView.bounds.width, height: collectionView.bounds.height)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat
{
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets
{
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
}
Storyboard截图:
输出屏幕:
关于ios - collectionViewLayout sizeForItemAtIndexPath -> CGSize 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653789/