UICollectionViewCell systemLayoutSizeFittingSize 返回不正确的宽度

2024-02-19

我一直在玩弄动态 UICollectionViewCell 并注意到在 iOS 8 上调用cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize) on a UICollectionViewCell返回不正确的宽度。目前解决此问题的唯一解决方法是显式添加宽度约束以强制单元格的宽度。下面的代码在 Cell 子类中使用:

func calculatePreferredHeightForFrame(frame: CGRect) -> CGFloat {
    var newFrame = frame
    self.frame = newFrame
    let widthConstraint = NSLayoutConstraint(item: contentView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: CGRectGetWidth(frame))
    contentView.addConstraint(widthConstraint)
    self.setNeedsUpdateConstraints()
    self.updateConstraintsIfNeeded()
    self.setNeedsLayout()
    self.layoutIfNeeded()
    let desiredHeight: CGFloat = self.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height
    newFrame.size.height = CGFloat(ceilf(Float(desiredHeight)))
    contentView.removeConstraint(widthConstraint)
    return CGRectGetHeight(newFrame)
}

我知道在 iOS 8 和动态 UICollectionViewFlowLayout 中,UICollectionViewCell 的 contentView 以不同的方式处理约束,但是我在这里缺少什么吗?需要做什么才能确保 systemLayoutSizeFittingSize 在单元格上使用特定宽度?

我也看到了这篇文章(使用自动布局指定 UICollectionView 中单元格的一维 https://stackoverflow.com/questions/26143591/specifying-one-dimension-of-cells-in-uicollectionview-using-auto-layout)并相信这实际上可能使我的问题无效。也许 UICollectionViewFlowLayout 不是为只有一个动态维度的单元格设计的,但这仍然不能解释为什么单元格给出了不寻常的宽度。


我也遇到过同样的问题。关键是在获取systemLayoutSize时使用优先级。

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
{
    if (!self.prototypeCell) {
        self.prototypeCell = [TrainingMenuCell new];
        self.prototypeCell.contentView.translatesAutoresizingMaskIntoConstraints = NO;
    }

    [self configureCell:self.prototypeCell forIndexPath:indexPath];
    [self.prototypeCell setNeedsLayout];
    [self.prototypeCell layoutIfNeeded];

    CGFloat width = CGRectGetWidth(collectionView.frame) - 12;
    CGSize fittingSize = UILayoutFittingCompressedSize;
    fittingSize.width = width;

    CGSize size = [self.prototypeCell.contentView systemLayoutSizeFittingSize:fittingSize withHorizontalFittingPriority:UILayoutPriorityRequired verticalFittingPriority:UILayoutPriorityDefaultLow];
    return size;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UICollectionViewCell systemLayoutSizeFittingSize 返回不正确的宽度 的相关文章

  • ios Vision VNImageRequestHandler方向问题

    我正在尝试使用相机通过相机检测脸部VNImageRequestHandler iOS 愿景 当我在横向模式下用相机指向照片时 它会检测到面部 但方向模式相反 let detectFaceRequestHandler VNImageReque
  • 如何修复 ReactiveCocoa(带有 CocoaPods)的安装?

    这里是新手 尝试将 ReactiveCocoa 2 2 4 和 CocoaPods 安装到项目中 但在运行时遇到错误 我用过github 上的这个 podspec https github com CocoaPods Specs blob
  • 如何以编程方式使用资产目录图像的切片信息?

    我的项目中曾经有一个图像 我会像这样加载它 UIImage image UIImage imageNamed image name resizableImageWithCapInsets UIEdgeInsetsMake 10 0f 10
  • Xcode 在代码签名身份中看不到我的开发人员证书

    我续订了 IOS 开发人员证书 从钥匙串中删除了旧证书 然后单击了我的证书 钥匙串中的一切看起来都很正常 我有分发 开发人员 WWDC 证书 每个配置文件看起来都有效 并带有绿色标记 在组织器中的团队和配置文件部分下 但在代码签名身份下的
  • 如何在 iOS 中将 Firebase 对象持久保存到磁盘?

    看起来Firebase http www firebase comiOS 实现不支持客户端模型的离线缓存 这在实践中意味着 对于需要身份验证的 Firebase 应用程序 您需要首先进行身份验证并等待 Firebase 完成登录 检查用户身
  • SceneKit unproject Z 文档解释?

    我正在经历一些 SceneKit 概念 而我试图在脑海中巩固的一个概念是 unprojectPoint 我知道该函数将获取 2D 中的一个点并返回 3D 中的一个点 因此具有正确的 Z 值 当我阅读文档时 我读到了以下内容 method u
  • 为具有多个目标和不同平台的项目编写 Podfile

    我正在准备一个支持 OS X 和 iOS 的 Pod 我的 pod 有一些自己的依赖项 这些依赖项在 podspec 文件中定义 因此我使用 Podfile 来管理我用来开发 pod 和运行测试的项目的依赖项 我正在使用 CocoaPods
  • 使用 Quartz 创建 PDF 注释 (iOS)

    有人设法使用 Quartz 在现有 PDF 中编写自定义注释吗 我已经使用 CGPDFDocumentRef 等渲染了 PDF 现在工作正常 我成功地阅读了 Annots 字典 if CGPDFDictionaryGetArray page
  • 在 ios 版 Ionic 中接收 URL

    我正在使用离子框架 我正在尝试设置一种从另一个应用程序接收网址的方法 就像 您在浏览器中 单击共享 然后将链接发送到另一个应用程序 我的应用程序 我找到了这个cordova https stackoverflow com questions
  • Apple Developer 应用程序门户不再可以生成新的 Bundle Seed ID

    iOS 开发者门户中的新界面不再为您的应用程序 ID 提供 生成新的 按钮 取而代之的是 使用团队 ID 这将导致使用相同的种子 ID 任何人都知道为什么要进行更改以及您应该如何使用新的捆绑包种子 ID 随意补一些 不再可能生成新的种子 I
  • 在 UITableViewController 中重新排序行后 UI 更新不正确

    因此 我对表中的行重新排序 用户界面最终结果不正确 场景如下 表内容原文 a b c d e 如果我移动第 0 行 当前a 到第 4 行 当前e 我看到的最终结果是 c d e a a 一些背景 该表正在读取 Realm 对象的列表 我确认
  • 如何使用 Swift 将“完成”按钮添加到 iOS 中的数字键盘?

    它在默认键盘上工作得很好 但我无法让它在数字键盘上工作 有任何想法吗 据我所知 你不能在键盘部分添加 完成 按钮 你应该添加一个inputAccessoryView to the UITextField or UITextView 如果这就
  • 带约束的嵌套集合视图的意外行为 (Swift 4)

    我的表格视图中有一个单元格 其中包含水平分页集合视图 该集合视图的每个页面内都有一个垂直集合视图 为了避免 滚动滚动 问题 我在垂直集合视图中禁用了垂直滚动 垂直集合视图的单元格计数不是静态的 可以是任意数字 因此 这会产生一个问题 集合视
  • 将 Armadillo C++ 库导入 Xcode

    我是 Mac 用户 正在尝试安装和导入 C Armadillo 库 以下是我到目前为止所采取的步骤 1 我从其网站下载了犰狳库 2 我仔细阅读了下载文件中的 Readme txt 文件 解释了如何安装它 3 我使用CMake将犰狳下载文件制
  • 为arm64或arm7s编译OpenSSL FIPS功能库时出现未知的cpu类型

    我可以成功 至少没有警告并生成 a 文件 针对 arm7 x86 64 和 i386 进行编译 当我编译arm64时 我得到Unknown cpu type 100000c no adjustments made 当我编译arm7s时 我得
  • TTTAttributedLabel 可点击截断标记

    我有一个 TTTAttributedLabel 并为其指定了一个自定义属性截断标记 NSAttributedString atributedTruncationToken NSAttributedString alloc initWithS
  • Swift:协议、结构、类

    我开始学习 Swift 语言 但在理解协议 结构和类方面遇到了困难 我来自 Android 方面的编程 所以我相信 Swift 协议基本上是 Java 接口 其中每一个的正确用例是什么 这些类比并不 完全 正确 但这就是我所理解的要点 是的
  • XCode 7 中的 AWSS3TransferManagerUploadRequest

    我今天升级到 Xcode 7 Swift 2 0 我的项目正在使用 CocoaPods 我正在 POD 文件中导入所有与 AWS 相关的文件 我已经设置了桥接标头 并导入了 Amazon 告诉我的所有文件 在升级到 Swift 2 0 之前
  • 如何在Sprite Kit中实现鼠标关节?

    我已经在 iOS 上用 Cocos2d Box2d 编写了拖放功能的工作实现 我需要将它移植到 Sprite Kit 逻辑非常基本 当用户触摸屏幕时 找到手指下的精灵 在找到的精灵和场景的物理体之间创建鼠标关节 将关节的目标设置为触摸位置
  • 领域:结果 和列表

    是否可以转换Results

随机推荐

  • tkinter:无法进入条目小部件

    我不明白为什么下面的输入框rackGUI py在我的代码中是静态的 不允许输入任何内容 我相信所有的Entry对象被正确实例化 我将文本变量指定为StringVar 我的直觉告诉我问题在于命令参数create button实例化 但我不太确
  • Jsoup 未下载整个页面

    网页是 http www hkex com hk eng market sec tradinfo stockcode eisdeqty pf htm http www hkex com hk eng market sec tradinfo
  • IdentityServer4分别对每个客户端进行身份验证

    我使用两个不同的客户端 IdentityServer4提供API保护和登录表单 我可以配置客户端以避免单点登录吗 我的意思是 即使我登录了第一个客户端 我也需要登录第二个客户端 我的ID4配置 internal static IEnumer
  • Highcharts 进度条形图

    是否可以在 Highcharts 中创建这样的进度图表 https 0 s3 envato com files 84221450 screenshots weblator responsive charts 7 bootstrap jpg
  • Jackson->Jackson + HttpPost =“无效的UTF-8中间字节”,设置Mime和编码

    我在我的客户端中使用 Apache HTTP 客户端库和 Jackson 当我将 JSON 发布到服务器时 出现错误 org codehaus jackson JsonParseException Invalid UTF 8 middle
  • 完全适合初学者使用 Maphilight?

    我正在尝试使用名为 maphilight 的 jquery 插件 我对使用 jquery 插件完全陌生 我对其他网页设计编码有相当多的经验 甚至对 javascript 有一点经验 但实际上尝试像这样实际使用它 这是第一次 我只是无法让这个
  • 运算符重载的基本规则和习惯用法是什么?

    注 答案已在特定订单 但由于许多用户根据投票而不是给出的时间对答案进行排序 因此这里有一个答案索引按照最有意义的顺序 C 中运算符重载的一般语法 https stackoverflow com questions 4421706 opera
  • 使用 Ant 构建 Android 项目 -- 找不到符号

    我正在尝试使用 ant 构建我的 android 项目 它在 eclipse 中运行良好 我运行错误并显示以下构建失败行 BUILD FAILED android sdks tools ant build xml 680 The follo
  • 前台服务在执行互联网相关操作时被杀死

    更新 以前我找不到关于我的前台服务何时被终止的明确定义的模式 经过对发生这种情况的设备 并非所有设备上都发生 进行更多调试后 我发现了 1 很多时候 当我打开 chrome 加载网站时 前台服务会被终止 有时甚至当我使用 Whatsapp
  • 是否可以在同一页面上使用多个 h1 标签,但样式不同?

    我有一个网页 我在各个 DIV 中多次使用 h1 标签 并且我将每个 div 的 h1 样式设置为适当的大小 例如 content h1 font size 22px left nav h1 font size 14px content r
  • 如何使用 JPA - EntityGraph 仅加载实体 @Basic 属性的子集?

    我找到了这个文档 https docs oracle com javaee 7 tutorial persistence entitygraphs htm关于实体图 读完之后 它给了我一个想法 您可以使用实体图来仅检索实体的子集 Basic
  • Android Studio 中的 Firebase android jars 文档/javadoc [重复]

    这个问题在这里已经有答案了 我正在尝试在 Android studio 上查看适用于 Android 的 Firebase Javadoc API 我在互联网上找到了javadoc 例如 数据库参考 https firebase googl
  • 如何在 Azure 中启用 PUT 请求?

    我正在 Azure 上构建 REST API 但是当我尝试通过 PUT 方法访问端点时 我得到了HTTP 405 Method Not Allowed 状态以及 IIS 错误消息 由于无效 您要查找的页面无法显示 正在使用方法 HTTP 动
  • 促使 TestFlight/iTunes Connect 发布新的测试版

    我正在使用 iTunes Connect 中的新测试版功能 我将一个版本 98 上传到 iTunes Connect 设置了一些内部测试人员 然后他们下载了该版本 现在 我已经使用新版本 build 99 更新了构建 并且该版本已上传到 i
  • logcat 停止写入设备上的文件

    对于 Android 应用程序 我将日志保存在设备本身上 以便在出现问题时我们可以找出问题所在 该设备在无互联网环境中运行 因此无法远程写入日志 下面的代码首先清除缓冲区 然后连续将记录的内容写入 logFile try Process p
  • 如何减小超过 600 MB 的 Electron 封装大小

    我发现这是因为节点模块和应用程序打包了一些不需要的东西来运行 当前文件大小为 600 mb 但我希望它小于 200 mb 我怀疑 no prune 填充了构建的包中的所有节点模块 但我只需要指定构建的包中的节点模块 我尝试删除 packag
  • 可绘制的 getResources().getIdentifier 问题

    这是我第一次来这里 我发现这个网站非常有用 我是 android 新手 我需要找出为什么我无法在列表视图中动态加载图像 我有三个字符串数组 private String lv arr News Events Other private St
  • cs107 makefile::找不到-lrssnews

    我想开始从事在线斯坦福 CS107 编程范式课程的第四个作业 即 RSS 搜索器 然而 我在第一步就落后了 我无法编译准备好的 待处理的 未完成的程序 当我输入 make 时出现此错误 gcc rss news search o g Wal
  • 在生产和版本控制同步问题中运行 Strapi

    我想知道在生产中运行 Strapi 的最佳实践是什么 我注意到 当添加内容类型时 Strapi 会生成新文件 这意味着生产环境的文件将与版本控制不同步 有推荐的部署流程吗 在管理中进行更改后 我是否应该将生产中的更改提交到我的 git 存储
  • UICollectionViewCell systemLayoutSizeFittingSize 返回不正确的宽度

    我一直在玩弄动态 UICollectionViewCell 并注意到在 iOS 8 上调用cell contentView systemLayoutSizeFittingSize UILayoutFittingCompressedSize