【问题标题】:iOS: UIImage and other items in prototype UITableViewCell not showing consistentlyiOS:原型 UITableViewCell 中的 UIImage 和其他项目显示不一致
【发布时间】:2015-01-13 04:29:59
【问题描述】:

我已将 UIImageView 作为弱 IBOutlet 正确连接到原型单元,但是当我运行程序时,我无法在模拟器和设备上显示它。当我尝试删除原型单元时,事情变得更加奇怪并重建它,但没有显示其他项目(例如:UIButtons、UILabels)。

尝试了“清理”、“清理构建文件夹”,从我的设备中删除了该应用程序,甚至从我的 Mac 中删除了“派生数据”文件夹,但无济于事。甚至尝试在单元格中安装一个新的 UILabel 并让它不显示!

我已经确定:

  1. 这些项目已正确连接到我的单元格 .h 文件,如下所示:

    @property (weak, nonatomic) IBOutlet UIImageView *coverImage; @property (weak, nonatomic) IBOutlet UILabel *activityLabel;

  2. cellForRowAtIndexPath 已正确完成:

{

NewsFeedCell * cell = [tableView dequeueReusableCellWithIdentifier:@"NewsFeedCell" forIndexPath:indexPath];


if (self.dataInStorage)
{
    NSDictionary * newsFeedData = (NSDictionary*) [NSKeyedUnarchiver unarchiveObjectWithData:self.dataInStorage];
    NSDictionary * dataToDisplay = [[newsFeedData objectForKey:@"Content"] objectAtIndex:indexPath.row];


    //ActivityLabel
    NSInteger typeID = [[dataToDisplay objectForKey:@"TypeID"] integerValue];
    switch (typeID)
    {
        case 3:
            cell.activityLabel.text = [NSString stringWithFormat:@"created an event - %@", [dataToDisplay objectForKey:@"Title"]];
            break;

        case 7:
            cell.activityLabel.text = [NSString stringWithFormat:@"added a listing - %@", [dataToDisplay objectForKey:@"Title"]];
            break;

        default:
            break;
    }

    //CoverImage
    UIImage * coverImage = [UIImage imageWithData:[dataToDisplay objectForKey:@"CoverImage"]];

    CGImageRef cgref = [coverImage CGImage];
    CIImage *cim = [coverImage CIImage];

    if (!(cim == nil && cgref == NULL))
    {
        //Image is available
        cell.coverImage.image =[UIImage imageWithData:coverImage];
    }

}

return cell;  

我认为问题可能出在配置或情节提要设置中,尽管 10 多个小时后我仍然无法弄清楚。谁需要源代码看一下,请告诉我,以便我可以将整个文件夹发送给您。

需要帮助!

【问题讨论】:

  • 请附上截图。
  • 请在 cellForRowAtIndexpath 中提供代码并检查您是否已将委托和 tableview 的数据源与您的控制器连接
  • 请提供源代码..
  • @LightYagami 我已经检查过了,它们已正确连接。单元格中的所有其他项目都显示出来,因此应该表明数据源和委托连接良好。只是对于 UIImageView 以及当我尝试编辑现有项目时,事情变得非常奇怪。
  • @AdeelUrRehman 你需要哪张截图?

标签: ios objective-c iphone uitableview xcode-storyboard


【解决方案1】:

在 Identity Inspector 中检查 UIImageView 的大小(出现在 Xcode 的右侧)。

有时它的 (width,height) 会自动变为 (0,0)

【讨论】:

  • 已经检查过,它们都很好。我正在使用自动布局,因此宽度和高度是固定的。它可能在运行时改变吗?
  • 是的,我使用的是 Xcode 6.1。那么你有没有想出任何解决方法来解决这个问题?我的整个故事板变得如此奇怪,我完全担心我将如何编写剩余的 >5 个 tableViews。
  • @Marcus 在使用 UITableView 时,我也遇到了同样的问题。视图使用了向左上角的回避,其宽度和高度变为 0,0
  • 那你做了什么?以编程方式将宽度和高度重置为 cellForRowAtIndexPath 处的所需数量?
  • @Marcus ya.. 我做了硬编码.. 以编程方式设置宽度 n 高度.. 所以每当我运行应用程序时,它确实会在运行时发生变化
【解决方案2】:

好的,我发现我认为是这里的错误。 断开封面图像插座连接, 创建一个新的 ImageView 并将其放入情节提要中。创建与类和插座的连接。应该这样做。

您似乎从另一个视图复制粘贴了插座,请断开所有连接,然后再次将它们与您的班级(newsFeedcell)和情节提要中的插座重新连接。这样做可以防止将来发生冲突。

干杯,希望这能解决它

[编辑]

编写此代码。

cell.imageview.image = coverimage

【讨论】:

  • 感谢您的帮助。但是,我尝试在右侧面板连接检查器中断开coverImage 插座连接,删除imageView,将新imageView 拖到原型单元格并将其连接到单元格.h 类的@property。仍然没有结果。还断开所有 IBOutlet 连接并重新连接。仍然 imageView 仍然不可见。
  • 哇。 “cell.imageView.image = coverImage”解决了这个问题!你介意告诉我这背后的原因是什么吗? “cell.imageView”如何引用“cell.coverImage”?我的代码出了什么问题,我应该怎么做才能防止将来出现错误?谢谢!
  • 好吧,我认为,您从其他视图复制了网点,这弄乱了网点,并且在您的代码中,coverimage 是一个 UIImage 实例。首先您将 cell.coverimage.image 分配给 nsdata 实例(我认为)。如果单元格的封面图像连接为单元格的图像视图,请再次检查插座。如果这有帮助,请接受答案
  • 我尝试重新连接所有内容,但除了添加“cell.imageView.image = coverImage”代码外,没有任何效果。感谢您的解决方案。但是,我检查了文档,我怀疑“cell.imageView”是 UITableViewCell 的默认属性,将图片分配给它不是一个明智的解决方案,特别是考虑到我要添加另一个 imageView 到以后的单元格。如果我错了,请纠正我。
  • 所以我猜这个问题还没有完全解决。非常感谢您的帮助!
【解决方案3】:

在另一个帖子中发布问题后得到了@Paulw11 的回答。显然,当我的尺寸配置为 reg-reg 时,我错误地将项目添加到单元格中,而不是我使用的通常的 any-any。当然,这些项目在我的 iPhone 设备上是不可见的! (reg-reg 将使这些项目仅在 iPad 设备上可见)未来的编码人员要小心!

再次感谢@Paulw11 的大力帮助。还有@LightYagami 和@AashishTamsya 的努力。

干杯!

链接到另一个线程:iOS: Items in custom UITableViewCell not showing up consistently. Storyboard bug?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-03
    • 2015-10-07
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多