UICollectionViewCell 不适合设备屏幕

Posted

技术标签:

【中文标题】UICollectionViewCell 不适合设备屏幕【英文标题】:UICollectionViewCell does not fit device screen 【发布时间】:2015-11-17 23:42:29 【问题描述】:

我正在尝试使 UICollectionViewCell 适合屏幕宽度。

在界面生成器中,如下所示:

当我在 iPhone 6 上构建和运行时,它看起来像这样:

(如您所见,我想填充左右两侧的宽度。

我尝试在cellForItemAtIndexPath 中添加这个:

cell.frame.size = CGSizeMake(UIScreen.mainScreen().bounds.size.width, cell.bounds.size.height)

但这使单元格移动到右侧,因此单元格的一部分超出了屏幕视图..

我的cellForItemAtIndexPath 看起来像这样:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
    
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell  

        cell.frame.size = CGSizeMake(UIScreen.mainScreen().bounds.size.width, cell.bounds.size.height)

        cell.flagContentButton.titleLabel?.adjustsFontSizeToFitWidth = true
        cell.uploadedTimeLabel.adjustsFontSizeToFitWidth = true
        cell.imageText.adjustsFontSizeToFitWidth = true

        cell.layer.borderWidth = 0.5
        cell.layer.cornerRadius = 3
        let myColor : UIColor = UIColor(red: 0.0, green: 0.0, blue:0.0, alpha: 0.15)
        cell.backgroundColor = UIColor.whiteColor()
        cell.layer.borderColor = myColor.CGColor

        if (self.arrayOfDetails.count > indexPath.row)
            let post = self.arrayOfDetails[indexPath.row]
            cell.imageText.text = post.text
            cell.objectID.append(post.objID)
            cell.uploadedTimeLabel.text = post.CreatedAt.timeAgo

            cell.imageView.setImageWithUrl(NSURL(string: post.image)!, placeHolderImage: UIImage(named: "Placeholder"))
        

        return cell
    

编辑

我尝试添加此代码:

func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize 
        // Code below
        return CGSizeMake(UIScreen.mainScreen().bounds.size.width, 126)
    

这使得宽度适合,但图像和文本没有移动: Image here

【问题讨论】:

您是否检查过收藏视图的内容插图? @pbush25 - 是的,都是 0。 你使用了自动布局吗? @SuttikeatWitchayakul 不,我不使用自动布局:s8.postimg.org/epcjy7y91/Screen_Shot_2015_11_18_at_13_09_02.png 【参考方案1】:

看起来你是UIEdgeInsetsios 8+ 上默认不为零的受害者。您可以在 Interface Builder 中设置这些:

或者在代码中:

UITableView:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath

    if ([cell respondsToSelector:@selector(setSeparatorInset:)]) 
        [cell setSeparatorInset:UIEdgeInsetsZero];
    

    if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) 
        [cell setPreservesSuperviewLayoutMargins:NO];
    

    if ([cell respondsToSelector:@selector(setLayoutMargins:)]) 
        [cell setLayoutMargins:UIEdgeInsetsZero];
    

UICollectionView:

将代理 UICollectionViewDelegateFlowLayout 添加到您的视图控制器界面,然后:

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section

    return UIEdgeInsetsMake(0, 0, 0, 0);

【讨论】:

界面生成器在哪里?并且cell.separatorInset = UIEdgeInsetsZero 行在 Swift 中不起作用。 这是我的:s30.postimg.org/kmj4zqh9d/… 您在表格/集合视图本身上配置此权限。在 IB 中选择表/集合视图,然后在右侧窗格中,您将看到布局边距。如果您使用的是 AutoLayout,您可能还需要调整约束以不使用边距。 我没有使用表格视图。我正在使用 CollectionView - 我已禁用自动布局。 对不起,如果您使用的是 IB,同样的事情。代码略有不同 - 请参阅更新。

以上是关于UICollectionViewCell 不适合设备屏幕的主要内容,如果未能解决你的问题,请参考以下文章

点击时更改 UICollectionViewCell 上的 ImageView 图像

iOS中UIcollectionviewCell的动态宽度?

UICollectionViewCell 间距

iOS - 图像未加载到可重用的 UICollectionViewCell 上

UICollectionViewCell 内的 UIScrollView 不滚动

UICollectionViewCell 不显示图像