Storyboards + UIcollectionView:UI 在 iOS 模拟器和设备上的显示方式不同

Posted

技术标签:

【中文标题】Storyboards + UIcollectionView:UI 在 iOS 模拟器和设备上的显示方式不同【英文标题】:Storyboards + UIcollectionView : Ui shows up differently on iOS Simulator and on Device 【发布时间】:2014-09-26 14:29:44 【问题描述】:

我正在尝试在 Xcode 6 上使用 Stroyboards 为 iPhone5、5c、5s 和 6 制作应用程序,但我遇到了问题。

我正在使用带有自定义 UICollectionViewCell 和单元格中包含的另一个自定义视图的 UICollectionView。

问题是,当我查看故事板时,我看到了我需要什么,我在 ios 模拟器中运行应用程序,用户界面看起来不错,但是当我在 iPhone 5c 上测试同一个应用程序时,用户界面大部分是空白的。

这是来自模拟器的图像:

这就是我在 iPhone 上得到的:

各个项目是 UIViewControllerCell 子类的对象。

模拟器屏幕截图中的图像是一个 UIView(包含在 UICollectionViewCell 中),它根据我提供给它的图像数量来设置图像的框架。因此,如果我有 1 个,那么它会显示在为第一个项目指定的图像的完整区域中,如果有超过 4 个图像,它最多可以显示 4 个图像,然后有一个标签代替第 4 个图像。

对我来说真正奇怪的是,在 iPhone 5c 上,UI 只显示一个图像,所以至少 UiCollectionView 单元格是可见的,但是单元格也确实有白色背景色,为什么没有出现? 这是子类 UICllectionViewCell 的 drawRect 方法中的代码:

-(void)drawRect:(CGRect)rect     
self.contentView.layer.cornerRadius = 3.0f;
self.contentView.layer.borderWidth = 0.25f;
self.contentView.layer.borderColor = [UIColor clearColor].CGColor;
self.contentView.backgroundColor = [UIColor whiteColor];
self.contentView.layer.masksToBounds = YES;

self.layer.shadowColor = [UIColor blackColor].CGColor;
self.layer.shadowOffset = CGSizeMake(0, 0.5f);
self.layer.shadowRadius = 3.0f;
self.layer.shadowOpacity = 0.125f;
self.layer.masksToBounds = NO;
self.layer.shadowPath = [UIBezierPath bezierPathWithRoundedRect:self.bounds cornerRadius:self.contentView.layer.cornerRadius].CGPath;

我尝试使用约束,但没有任何反应,我关闭了自动布局,但仍然没有。

有人可以指出什么是错误的以及任何修复方法吗?

谢谢

编辑 1:

我在 drawRect 的顶部添加了self.contentView.frame = self.frame;,结果如下:

这是我用来加载图像的代码,它在子类化的 UICollectionViewCell 中:

-(void) populate:(dataObject *) dataObject

NSArray *thumbsArray = dataObject.thumnails;
_thumbnailsView = [[ThumbnailsView alloc] initWithFrame:CGRectMake(0, 0, 139, 107)];
_tempThumbnailsView = [[ThumbnailsView alloc] initWithFrame:CGRectMake(0, 0, 139, 107)];
[_tempThumbnailsView setBackgroundColor:[UIColor blueColor]];
_tempThumbnailsView.fileCount = bucket.fileCount;
_tempThumbnailsView.thumbnailsArray = thumbsArray;

[self.thumbnailsViewArea addSubview:_tempThumbnailsView];

self.title.text = dataObject.name;

“self.thumbnailsViewArea”是包含图像的单元格中视图的 IBOutlet。

【问题讨论】:

【参考方案1】:

检查您的自动布局属性。

【讨论】:

我关闭了自动布局,由于某种原因,它开始准确地显示我在情节提要上看到的内容。我也尝试了自动布局,我发现它也可以使用它,但我不需要在这个屏幕上进行自动布局,所以我不打算这样做。我会稍等片刻,看看是否至少可以得到更好的解释,否则我会将您的答案标记为已接受。

以上是关于Storyboards + UIcollectionView:UI 在 iOS 模拟器和设备上的显示方式不同的主要内容,如果未能解决你的问题,请参考以下文章

你如何使用 Storyboards 引用 UISearchController

使用 Storyboards 将数据模型分配给 appDelegate 中的视图控制器 - ios

使用 Xcode 5 Storyboards 构建带有原型表视图单元的动态表视图

是否可以使用 Storyboards 创建非全屏 UITableView?

使用 Storyboards 处理未知深度的 UITableView 的最佳方法

使用 Storyboards 设置自定义导航栏