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】:看起来你是UIEdgeInsets
在 ios 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的动态宽度?
iOS - 图像未加载到可重用的 UICollectionViewCell 上