数组中的图像未显示在 UICollectionView 中
Images from array not being displayed in UICollectionView
我正在尝试在 UICollectionView 中显示一组图像。正在显示单元格,但没有显示图像。
这是正在构建的单元格:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"Cell";
UICollectionViewCell *cell =
[collectionView dequeueReusableCellWithReuseIdentifier:identifier
forIndexPath:indexPath];
UIImageView * catagoryImage = [[UIImageView alloc] initWithFrame:CGRectMake((cell.frame.origin.x),(cell.frame.origin.y), cell.frame.size.width, cell.frame.size.height)];
[catagoryImage setImage:[UIImage imageNamed:[Apps objectAtIndex:indexPath.row]]];
[cell.layer setCornerRadius:4];
[cell addSubview:catagoryImage];
cell.clipsToBounds = NO;
return cell;
}
这是声明的数组:
Apps = [NSArray arrayWithObjects:@"Appstore.jpg", @"2.gif", @"3.gif", @"4.gif", @"5.gif", @"7.gif", @"8.gif",@"9.gif", nil];
有什么想法吗?
你有几个选项,但我会命名为 2:
This。这有点老套。但它有效
子类 UICollectionViewCell
代码有两个问题。第一个,更大的一个,是在每次调用 cellForItemAtIndexPath
.
时创建图像视图的想法
每次将单元格滚动到视图中时都会调用此方法,并且会重复使用这些单元格,因此当用户滚动时,您的单元格最终会变成一堆又一堆的 UIImageView。
问题二是imageView框架的坐标系。它应该相对于单元格的边界放置,而不是位于父视图(集合视图)坐标 space 中的单元格框架,所以...
// see if this cell has an image view already
UIImageView *categoryImageView = (UIImageView *)[cell viewWithTag:128];
if (!categoryImageView) {
// only create one if we don't have one
CGRect frame = cell.bounds; // this is zero based, relative to the cell
categoryImageView = [[UIImageView alloc] initWithFrame:frame];
categoryImageView.tag = 128; // so we can find it later
[cell addSubview:categoryImageView];
}
// add it conditionally, but configure it unconditionally
categoryImageView.image = [UIImage imageNamed:[Apps objectAtIndex:indexPath.row]]];
代码的另一个可能问题是访问 Apps objectAtIndex:
。显然 Apps
是一个非常规命名的 NSArray 实例。仅当您的 numberOfItemsInSection
数据源方法 returns Apps.count
并且数组中的所有元素都是您的应用程序包中的图像名称时才可以。
怀疑它。
图像在键盘方案之外,在容器包中。
我正在尝试在 UICollectionView 中显示一组图像。正在显示单元格,但没有显示图像。
这是正在构建的单元格:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView
cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *identifier = @"Cell";
UICollectionViewCell *cell =
[collectionView dequeueReusableCellWithReuseIdentifier:identifier
forIndexPath:indexPath];
UIImageView * catagoryImage = [[UIImageView alloc] initWithFrame:CGRectMake((cell.frame.origin.x),(cell.frame.origin.y), cell.frame.size.width, cell.frame.size.height)];
[catagoryImage setImage:[UIImage imageNamed:[Apps objectAtIndex:indexPath.row]]];
[cell.layer setCornerRadius:4];
[cell addSubview:catagoryImage];
cell.clipsToBounds = NO;
return cell;
}
这是声明的数组:
Apps = [NSArray arrayWithObjects:@"Appstore.jpg", @"2.gif", @"3.gif", @"4.gif", @"5.gif", @"7.gif", @"8.gif",@"9.gif", nil];
有什么想法吗?
你有几个选项,但我会命名为 2:
This。这有点老套。但它有效
子类
UICollectionViewCell
代码有两个问题。第一个,更大的一个,是在每次调用 cellForItemAtIndexPath
.
每次将单元格滚动到视图中时都会调用此方法,并且会重复使用这些单元格,因此当用户滚动时,您的单元格最终会变成一堆又一堆的 UIImageView。
问题二是imageView框架的坐标系。它应该相对于单元格的边界放置,而不是位于父视图(集合视图)坐标 space 中的单元格框架,所以...
// see if this cell has an image view already
UIImageView *categoryImageView = (UIImageView *)[cell viewWithTag:128];
if (!categoryImageView) {
// only create one if we don't have one
CGRect frame = cell.bounds; // this is zero based, relative to the cell
categoryImageView = [[UIImageView alloc] initWithFrame:frame];
categoryImageView.tag = 128; // so we can find it later
[cell addSubview:categoryImageView];
}
// add it conditionally, but configure it unconditionally
categoryImageView.image = [UIImage imageNamed:[Apps objectAtIndex:indexPath.row]]];
代码的另一个可能问题是访问 Apps objectAtIndex:
。显然 Apps
是一个非常规命名的 NSArray 实例。仅当您的 numberOfItemsInSection
数据源方法 returns Apps.count
并且数组中的所有元素都是您的应用程序包中的图像名称时才可以。
怀疑它。
图像在键盘方案之外,在容器包中。