根据 UICollectionView 中的图像动态更改单元格大小

2024-03-21

我正在水平集合视图中显示从服务器接收的动态图像。当我设置集合视图时,我设置了:

-(void)setupCollectionView{
[self setupPageControlView];
self.screensCollectionView.delegate=self;
self.screensCollectionView.dataSource=self;
[self.screensCollectionView registerNib:[UINib nibWithNibName:@"FGAppScreensCollectionViewItemCell" bundle:nil] forCellWithReuseIdentifier:@"screenCell"];


UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
[flowLayout setScrollDirection:UICollectionViewScrollDirectionHorizontal];
[flowLayout setMinimumInteritemSpacing:0.0f];
[flowLayout setMinimumLineSpacing:0.0f];
[flowLayout setItemSize:CGSizeMake(165, 255)];
//[self.screensCollectionView setPagingEnabled:YES];
[self.screensCollectionView setCollectionViewLayout:flowLayout];

}

对于 cellForRowAtIndexPath 我下载如下图像:

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
static NSString *cellIdentifier = @"screenCell";

FGAppScreensCollectionViewItemCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:[self.imageURLArray objectAtIndex:indexPath.row]]];

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[spinner startAnimating];
[spinner setFrame:CGRectMake(50, 100, 20, 20)];
[cell.contentView addSubview:spinner];
[cell.screenImageView setImageWithURLRequest:urlRequest placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
    //STOP THE SPINNER
    for (UIView* view in [cell.contentView subviews]) {
        if ([view isKindOfClass:[UIActivityIndicatorView class]]) {
            [view removeFromSuperview];
        }
    }
    cell.screenImageView.image = image;

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    //
}];
[cell.screenImageView setImageWithURL:[NSURL URLWithString:[self.imageURLArray objectAtIndex:indexPath.row]]];
if (self.delegate) {
      UITapGestureRecognizer* g = [[UITapGestureRecognizer alloc] initWithTarget:self.delegate action:@selector(showPopUpImageView:)];
      [cell.screenImageView addGestureRecognizer:g];
}

return cell;

}

然而有肖像和风景图像显示在集合视图中。肖像图像显示得很好,但风景图像在集合视图中显得很小。我需要做的是根据图像大小调整单元格大小,以便它们填充正确的宽高比?

我添加了如下所示的方法,但问题是它在开始时立即被所有单元格调用,并且一旦我在 cellForRowAtIndexPath 方法中下载图像就不会被调用:

    - (CGSize)collectionView:(UICollectionView *)collectionView
              layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath

{

return CGSizeMake(165, 255);

}

因此,我想知道如何实现此功能,请告诉我是否需要这方面的更多信息?


In -setImageWithURLRequest:...,当图像加载时将其缓存在哈希表中,然后调用-reloadItemsAtIndexPaths:使用当前图像路径,重新加载单元格,从而导致 CollectionView 重新检查单元格的大小。

确保在查找图像时查阅哈希表。当 collectionView 项目滚动到屏幕外并再次滚动时,这还可以为您节省额外的网络访问量。

请注意,我担心如果您使用的是UICollectionReusableView子类化您的代码可能会失败,因为单元格可以在加载图像之前重新使用,因此图像将加载到错误的位置。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据 UICollectionView 中的图像动态更改单元格大小 的相关文章

  • 决策树和规则引擎 (Drools)

    In the application that I m working on right now I need to periodically check eligibility of tens of thousands of object
  • Java中单例的其他方式[重复]

    这个问题在这里已经有答案了 只是我在考虑编写单例类的其他方法 那么这个类是否被认为是单例类呢 public class MyClass static Myclass myclass static myclass new MyClass pr
  • Spark scala 模拟 Spark.implicits 用于单元测试

    当尝试使用 Spark 和 Scala 简化单元测试时 我使用 scala test 和mockito scala 以及mockito Sugar 这只是让你做这样的事情 val sparkSessionMock mock SparkSes
  • Chrome 调试器注入 javascript

    我有这样的好奇心 是否可以以某种方式在我的页面中注入 javascript 并执行它并调试它 正如您在控制台中所做的那样 但在控制台中您无法暂停并观察变量 是否可以调试我通过控制台输入的代码 为什么无法调试通过 XHR 接收的代码 Than
  • mybatis:使用带有 XML 配置的映射器接口作为全局参数

    我喜欢使用 XML 表示法来指定全局参数 例如连接字符串 我也喜欢 Mapper 注释 当我尝试将两者结合起来时 我得到这个例外 https stackoverflow com questions 4263832 type interfac
  • 使用 Ruby aws-sdk 跟踪文件到 S3 的上传进度

    首先 我知道SO中有很多与此类似的问题 在过去的一周里 我读了大部分 如果不是全部 但我仍然无法让这项工作为我工作 我正在开发一个 Ruby on Rails 应用程序 允许用户将 mp3 文件上传到 Amazon S3 上传本身工作正常
  • 如何在连接到 Heroku PostgreSQL 的 Flask 应用程序上处理更多并发用户?

    Heroku 上的 Flask API 有许多端点 它们在将 json 化结果返回给客户端之前在我的 Heroku PostgreSQL 数据库上运行查询 我当前的计划是 Hobby Basic 层 因此数据库最多只能处理 20 个连接 如
  • Matplotlib loglog 的错误刻度/标签(双轴)

    我正在使用 matplotlib 创建对数图 如下图所示 默认刻度选择得很糟糕 充其量是这样 右边的 y 轴甚至根本没有 在线性等效中确实如此 而两个 x 轴都只有一个 有没有办法获得合理数量的带有标签的刻度 without为每个情节手动指
  • 如何为命令 stdout 添加 [stdout] 和 [stderr] 前缀?

    使用命令结构 https doc rust lang org std process struct Command html 如何向 stdout 和 stderr 缓冲区添加前缀 我希望输出看起来像这样 stdout things are
  • 如何将 SQLite 数据库捆绑到 Go 二进制文件中?

    我尝试使用 go bindata 和 packr 但这些包没有显示如何将 SQLite 数据库文件打包到二进制文件中 我不需要以任何方式更新数据库 我只想在启动时从中读取数据 如何将 SQLite 数据库文件嵌入到 Go 二进制文件中 SQ
  • 在DialogFragment中,onCreate应该做什么?

    我目前正在摆弄 DialogFragment 以学习使用它 我假设相比onCreateView onCreate 可以这样做 public void onCreate Bundle savedInstanceState super onCr
  • 如何禁用 solr 管理页面

    对于生产来说 拥有一个甚至不要求登录凭据的 solr 管理员感觉不安全 如何禁用默认的 solr 管理页面 我只是希望我的 web 应用程序使用 Solr 进行搜索词索引 我强烈建议保留管理页面用于调试目的 它在很多情况下拯救了我 有多种方
  • 在成为FirstResponder或resignFirstResponder的情况下将对象保持在键盘顶部?

    我目前在键盘顶部有一个 UITextField 当您点击它时 它应该粘在键盘顶部并平滑地向上移动 我不知道键盘的具体时长和动画类型 所以确实很坎坷 这是我所拥有的 theTextView resignFirstResponder UIVie
  • 水平和垂直居中 div 位于页面中间,页眉和页脚粘在页面顶部和底部

    我正在尝试制作一个具有固定高度页眉和页脚的页面 页眉位于屏幕顶部 100 宽度 页脚位于底部 100 宽度 我想将一个具有可变高度内容的 div 居中放置在页眉和页脚之间的空间中 在下面的 jsfiddle 中 如果内容比空格短 它会起作用
  • Rails - 渲染:目标锚标记的操作?

    我希望像这样使用渲染 render action gt page form 我也尝试过这个 render template gt site page form 那也没用 这个特定页面上的表单位于最底部 如果提交时发生任何错误 我不希望用户被
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle
  • 对象指针值作为字典的键

    我想使用对象的引用值作为字典的键 而不是对象值的副本 因此 我本质上想在字典中存储与另一个对象的特定实例关联的对象 并稍后检索该值 这可能吗 是不是完全违背了NSDictionary的理念 我可以看出我可能以错误的方式处理这个问题 因为字典
  • HTML 表格 - 固定列宽和多个可变列宽

    我必须建立一个有 5 列的表 表格宽度是可变的 内容宽度的 50 有些列包含固定大小的按钮 因此这些列应该有一个固定大小 例如 100px 有些列中有文本 所以我希望这些列具有可变的列宽 例如 Column1 tablewidth sum
  • 通过 Telnet 运行应用程序

    我需要创建一个 BAT 文件来通过 telnet 运行应用程序 但据我所知 在 DOS 上无法执行此操作 Telnet 不允许在连接的瞬间向远程计算机发送任何命令 并且 BAT 文件中的每个后续命令只有在 telnet 停止后才会执行 这段
  • R data.table 1.9.2 关于 setkey 的问题

    这似乎是 1 8 10 后引入的一个错误 与包含列表的 DT 的 setkey 相关 运行下面两个代码来查看问题 library data table dtl lt list dtl 1 lt data table scenario 1 p

随机推荐

  • 无需登录即可启动Raspberry Pi [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想问你是否有任何方法可以启动树莓派 使用Raspbian 而无需登录和密码并直接进入GUI 以 Windows 为例 拉斯布比喘息 以下
  • 在 /OPT:ICF 存在的情况下,Visual Studio 2013 是否可以正确优化?

    我希望下面的程序始终返回 0 但是 对于 Visual Studio 2013 更新 4 程序在发布版本中退出 1 我不确定这是否是一个错误 或者编译器的优化器是否正确并且依赖于某些边缘行为 如果关闭 CONST 宏 则释放 exe 将返回
  • 查找mysql中记录占用的空间

    我想找到数据库中记录占用的空间 我有2000条记录 我需要找到mySQL中的empid 4在数据库中占用了多少空间 请让我知道 mySQL 中的查询 显示表状态是您正在寻找的命令 http dev mysql com doc refman
  • 解决继承委托上不兼容的属性类型的语法

    我继承的一些代码有一个恼人的警告 它声明一个协议 然后使用它来指定委托 protocol MyTextFieldDelegate interface MyTextField UITextField property nonatomic as
  • 在非管理员帐户下运行自托管 OWIN Web API

    自托管 OWIN Web API 是否可以在非管理员帐户下运行 我已经尝试了几十个网址预订 但没有任何效果 服务无法启动 并显示 访问被拒绝 当帐户被添加到管理员角色时它会起作用 但我不希望这样 下面的代码在Win 7框架4 5 2上运行
  • python selenium 示例不起作用,说没有名为 Keys 的模块

    我在 Windows 机器上通过 pip 安装了 selenium 只需试用网站上的示例即可 http pypi python org pypi selenium from selenium import webdriver from se
  • 在 Firebase 中增加数据点的最简单方法?

    我在增加 Firebase 中的数据时遇到问题 Firebase clickedCounter 0 这是我的代码 IBAction func plus sender UIButton FIRDatabase database referen
  • Twisted:为什么将延迟回调传递给延迟线程会使线程突然阻塞?

    我尝试使用 txredis redis 的非阻塞扭曲 api 作为持久消息队列 但没有成功 我正在尝试使用我正在开发的 scrapy 项目进行设置 我发现虽然客户端没有阻塞 但它变得比本来应该的要慢得多 因为反应堆循环中本应是一个事件的事件
  • OpenCV:如何使用 HOGDescriptor::Detect 方法?

    I have succeeded in tracking moving objects in a video 然而我想决定一个物体是否是人 我已经尝试过HOGDescriptor在 OpenCV 中 HOGDescriptor 有两种检测人
  • django.db.utils.DataError:除以零

    我在以下代码行中收到错误 context stock margin context top stock annotate Avg purchase ExpressionWrapper F total puchase F quantity p
  • 第一个缩放事件删除中心变换

    我有一个像这样的 径向整齐树 https bl ocks org mbostock 4063550 https bl ocks org mbostock 4063550 我正在尝试添加缩放和平移 但我无法使缩放和平移正常工作 我的代码看起来
  • 在 JTree 上过滤[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Problem 对 a 应用过滤JTree以避免某些节点 叶子出现在渲染版本中JTree 理想情况下 我正在寻找一种允许动态过滤器的解决方案 但
  • React-native 在浏览器中打开链接并返回到应用程序

    我正在开发一个反应原生应用程序 它应该与支付网关进行通信 在完成支付过程 成功或失败 后 我需要向用户显示警报 为此 我打开了一个链接WebView之后我得到了 return 的 urlonNavigationStateChange并显示成
  • 一个程序如何控制另一个程序?

    机器人 它们是如何工作的 他们是否告诉视频游戏按下了某个键或点击了鼠标 如果没有 有没有办法让你的程序告诉另一个程序按下了一个键 我想制作一个程序来击败一些游戏 因此 任何资源或示例都值得赞赏 Update 因此一种方法是模拟击键 那么有哪
  • Javascript 中的“柯里化”和“组合”是同一概念吗?

    最近我在一本 Javascript 书中读到了有关函数组合的内容 然后在一个网站上我看到有人将其称为柯里化 它们是同一个概念吗 Omarjmh 的答案很好 但在我看来 撰写示例对于学习者来说极其复杂 它们是同一个概念吗 No 首先 柯里化是
  • 如何在Python中建立和求解联立方程

    对于固定整数n 我有一组2 n 1 联立方程如下 M p 1 n p 1 n M n 1 2 n N p 1 p 1 n M p 1 N p 1 n p 1 n M n 1 p n N p 1 M 1 1 n 2 n M n 1 2 n N
  • 如何编写一个正则表达式来匹配任意顺序的字符?

    我正在尝试编写一个正则表达式来匹配一组字符 而不考虑顺序 例如 str act str scan Insert expression here 将匹配 cat act tca atc tac cta 但不匹配ca ac or cata 我在
  • 从 IPHostEntry 获取有效 IP

    我尝试使用此方法获取我的计算机的 IP 地址 var ipadd Dns GetHostEntry Dns GetHostName foreach var ipAddress in ipadd AddressList Console Wri
  • javascript 中剩余参数和展开运算符的用法

    ECMAScript 6中添加的rest参数有什么用 例如 在 ECMAScript 5 中 您可以执行以下操作来获取从第二个元素开始的参数数组 ES 5 store Joe money store Jane letters certifi
  • 根据 UICollectionView 中的图像动态更改单元格大小

    我正在水平集合视图中显示从服务器接收的动态图像 当我设置集合视图时 我设置了 void setupCollectionView self setupPageControlView self screensCollectionView del