Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c UICollectionViewCell填充_Objective C_Uicollectionview_Uicollectionviewcell - Fatal编程技术网

Objective c UICollectionViewCell填充

Objective c UICollectionViewCell填充,objective-c,uicollectionview,uicollectionviewcell,Objective C,Uicollectionview,Uicollectionviewcell,我试图在集合视图单元格上设置零填充,我已将视图控制器上的“最小间距”设置为: 然而,细胞之间仍然存在差距: 此外,我还希望根据帧的宽度,单元格可以很好地包裹,例如,每个单元格的宽度为50px,因此如果有六个单元格,我将帧宽度设置为150px,它将显示两行三个单元格 但是,如果我通过执行以下操作将帧宽度设置为150: - (void)viewDidLoad { [super viewDidLoad]; CGRect frame = self.collectionView.fr

我试图在集合视图单元格上设置零填充,我已将视图控制器上的“最小间距”设置为:

然而,细胞之间仍然存在差距:

此外,我还希望根据帧的宽度,单元格可以很好地包裹,例如,每个单元格的宽度为50px,因此如果有六个单元格,我将帧宽度设置为150px,它将显示两行三个单元格

但是,如果我通过执行以下操作将帧宽度设置为150:

- (void)viewDidLoad
{
    [super viewDidLoad];

    CGRect frame = self.collectionView.frame;
    frame.size.width = 150;
    self.collectionView.frame = frame;
}
它看起来像上面的屏幕截图(太宽)

如果我将其设置为可笑的小值,例如10,那么它会在某种程度上进行包装:

UICollectionViewCell设置为50 x 50:

我还尝试通过编程设置单元格的大小,并删除了UIEdgeInset:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(0, 0, 0, 0);
}

我已禁用自动布局,以防有任何干扰。关于如何根据帧的宽度/高度移除填充物并将其包裹起来,有什么建议吗?

我不确定屏幕截图中的单元格是否为50x50(编辑:我猜它们是…)

检查是否已连接UICollectionViewDelegate和UICollectionViewDataSource

这是您需要实现的方法

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {
    CGSize retval = CGSizeMake(50, 50);
    return retval;
}
如果不起作用,请尝试将此代码放入viewDidLoad中

UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setMinimumInteritemSpacing:0.0f];
[flowLayout setMinimumLineSpacing:0.0f];
[flowLayout setItemSize:CGSizeMake(50.0f, 50.0f)];
[self.collectionView setCollectionViewLayout:flowLayout];

MinimumItemSpacing只是一个最小值,因此如果UICollectionViewLayout类决定需要,它可以更大

要纠正这一点,您可以创建自己的布局子类,并实现
-(UICollectionViewLayoutAttributes*)layoutAttributesForItemAtIndexPath:(NSIndexPath*)indexPath
方法,类似于中的答案(请参见第二个问题,而不是标记为正确的问题)

-(UICollectionViewLayoutAttributes*)layoutAttributesForItemAtIndexPath:(NSIndexPath*)indexPath{
UICollectionViewLayoutAttribute*附件=
[超级布局属性ForItemAtIndexPath:indexPath];
if(indexath.item==0)//退化情况1,节的第一项
返回ATT;
nsindepath*ipPrev=
[NSIndexPath indexPathForItem:indexPath.item-1片段:indexPath.section];
CGRect fPrev=[self-layouttributesforItemAtIndexPath:ipPrev].frame;
CGFloat rightPrev=fPrev.origin.x+fPrev.size.width+10;

如果(atts.frame.origin.x您使用的是UICollectionViewController,它与UITableViewController一样,具有集合视图(或表视图)作为视图控制器的基本
view
属性。这意味着它不能从视图控制器内调整大小;它的大小由它的超级视图控制——在本例中,它可以是作为根视图控制器的窗口,或者是嵌入它的父视图控制器

如果你想缩小集合视图区域,使单元格彼此相邻,你可以修改故事板中集合视图的部分插图。在你的例子中,15个左右的插图将单元格组合在一起-这是9*50(450)加30=480,这是3.5英寸iPhone的横向宽度


显然,这在iPhone 5或iPad中是不同的。您可以在运行时计算插入,使用标准UIViewController子类中保存的集合视图,或者将UICollectionViewController作为嵌入式视图控制器保存。后两种方法将使您只需指定一个大小,这可能比计算插入更好ts.

在ViewController中实现此方法

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
   return 2; //the spacing between cells is 2 px here
}

这是一个4英寸的横向视网膜屏幕,大小对我来说很合适。你的建议只是在代码中重新实现应该已经从nib设置好的内容。哦,是的。我没有注意到它处于横向模式。大小似乎是对的。但是,他的第二个屏幕截图中的集合视图没有150点的宽度。和ab对于建议的代码,我很清楚它只是在重新实现他认为他在故事板文件中所做的事情。感谢你的建议,尽管问题仍然存在,但我已经使用你的代码重新实现了它。我上传了一个示例项目,在这里显示错误:我无法重现此问题。我启动了一个空项目,只有一个视图,即ad将集合视图定义为子视图,将设置设置为与上面所示的设置相同,并使故事板中的框架为175x175。这将分隔单元格(流布局自然会这样做)。我使用您的代码更改viewDidLoad中的帧大小,它将更改为150宽,单元格将填补空白。您的问题中没有包含其他内容。啊!您使用的是UICollectionViewController。这样,您就无法更改集合视图的大小。它始终填充屏幕(除非已将其嵌入到容器视图控制器中)。让我看看是否可以调整插图…@jrturton感谢您花时间尝试复制此内容。虽然问题仍然存在,但我刚刚重新开始。我在这里上传了一个可能有用的示例:非常感谢,我就快到了,我在标准UIViewController子类中添加了UICollectionView,但我仍然无法调整UICollectionView的大小:我暂时无法查看,但您可能没有连接插座,或者您没有打开Autolayout,仍然在设置框架而不是编辑约束。我将UICollectionView放在UIViewController中-这不允许我调整UICollectionView的大小。但是,我补充道:d另一个视图,使层次结构现在看起来像UIViewController->UIView->UICollectionView。然后我调整了UIView的大小,它工作了。最后:)感谢您的帮助。
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
{
   return 2; //the spacing between cells is 2 px here
}