使用类似“标签”的单元格设置集合视图

2024-04-13

我一直在与客户合作UICollectionViewFlowLayout调整细胞之间的空间,这样我就可以在我的细胞中获得良好的流动collectionView。但使用我当前的代码,我无法弄清楚如何在不“破坏”行数的情况下调整单元格大小。这使得一些单元格认为它们可以容纳一行,但实际上却不能。

我的自定义流程布局

class UserProfileTagsFlowLayout: UICollectionViewFlowLayout {
    
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let attributesForElementsInRect = super.layoutAttributesForElements(in: rect)
        var newAttributesForElementsInRect = [UICollectionViewLayoutAttributes]()
        
        var leftMargin: CGFloat = 0.0;
        
        for attributes in attributesForElementsInRect! {
            if (attributes.frame.origin.x == self.sectionInset.left) {
                leftMargin = self.sectionInset.left
            } else {
                var newLeftAlignedFrame = attributes.frame
                newLeftAlignedFrame.origin.x = leftMargin
                attributes.frame = newLeftAlignedFrame
            }
            leftMargin += attributes.frame.size.width + 8 // Makes the space between cells
            newAttributesForElementsInRect.append(attributes)
        }
        
        return newAttributesForElementsInRect
    }
}

所以在我的ViewController我已经延长了

extension myViewController: UICollectionViewDelegateFlowLayout {
    
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        let tag = tagsArray[indexPath.row]
        let font = UIFont(name: "Raleway", size: 14)!
        let size = tag.value.size(withAttributes: [NSAttributedString.Key.font: font])
        let dynamicCellWidth = size.width

        /*
          The "+ 20" gives me the padding inside the cell
        */
        return CGSize(width: dynamicCellWidth + 20, height: 35)
    }
    
    // Space between rows
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 5
    }
    
    // Space between cells
    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 10
    }
}

当我尝试这段代码时,我在 iPhone X 的结果部分中得到了结果。您可以看到标签“机器学习”跳到新行,因为它认为它可以适合上面的行。如果我删除单元格的“填充”sizeForItem功能,那么我就不会有这个问题了。但它看起来很糟糕。

所以我的问题是:如何在不破坏 flowLayout 的情况下在单元格上使用填充?


到目前为止,我当前的结果如下所示:

iPhone X:


也许它会对你有所帮助。我认为您应该检查您的项目是否突出了集合视图的右侧插图。 在layoutAttributesForElements方法检查这个:

        let collectionViewWidth = self.collectionView?.frame.width - (self.sectionInset.right + self.sectionInset.left)

        if (attributes.frame.origin.x + attributes.frame.size.width > collectionViewWidth) {
            var newLeftAlignedFrame = attributes.frame
            newLeftAlignedFrame.origin.x = self.sectionInset.left
            attributes.frame = newLeftAlignedFrame 
        }

更新了我的答案,它对我有用,您可以在屏幕截图中看到它

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

使用类似“标签”的单元格设置集合视图 的相关文章

  • 奇怪的父/子NSManagedObjectContext现象

    我创建了两个这样的上下文 create writer MOC privateWriterContext NSManagedObjectContext alloc initWithConcurrencyType NSPrivateQueueC
  • skView.ignoreSiblingOrder 在 swift 中的重要性/效率?

    这样做有多重要 高效skView ignoreSiblingOrder true初始化场景时 现在 我将其设置为 true 但由于某种原因 当我从 MainMenu 场景启动 GameScene 时 它 会在我的角色之前加载背景 即使背景的
  • 如何在 NSDate 变量中仅设置时间?

    我有 NSDate 变量 只想更改时间 不应更改日期 是否可以 例如 用户在 DatePicker 日期中选择日期间隔 如果是开始日期 我想将时间设置为 00 00 00 如果是结束日期 我将时间设置为 23 59 59 感谢你的帮助 问候
  • 在 Firebase 中构建聊天应用的数据

    我正在关注 Firebase 指南结构化数据 https firebase google com docs database ios structure data flatten data structures对于聊天应用程序 他们建议的结
  • 当自定义子视图处理触摸时防止 UITableView 滚动

    在我的 iOS 应用程序中 有一个 UITableView 其中一个单元格中包含一个自定义子视图 该单元格是一个交互式视图 它处理触摸事件 touchesBegan touchesEnded touchesMoved 以更新自身 问题是 当
  • 检查系统时间是自动还是用户设置

    我需要在当前的项目中设置用户证明时间 我围绕这个问题发现了很多不同的问题 但似乎没有一个问题有我正在寻找的答案 这些是我到目前为止看过的问题 XCODE 如何从设备获取 验证准确的时间戳 https stackoverflow com qu
  • 如何从 iOS 应用程序检测不安全的 wifi 网络

    我想检测我的应用程序中是否存在不安全的 wifi 网络 是否有任何公共 iOS API 可以实现相同的目的 没有记录的 API 可以获取该信息 如果您的应用程序需要通过网络发送和接收敏感数据 您通常应该假设没有安全连接
  • 如何从日期中获取小时、分钟和上午/下午? [复制]

    这个问题在这里已经有答案了 我尝试从日期中提取小时 分钟和上午 下午 但我得到 NULL 输出 我在下面显示了我的代码 请查看 NSString dateStr 29 07 2013 02 00am NSDateFormatter form
  • Swift:无法为“[UIViewController]”类型的值添加下标?

    我试图弄清楚如何在 Xcode 7 iOS9 上的 Swift 中解决此问题 并且我也遇到此错误 无法为 UIViewController 类型的值添加下标 索引类型为 Int 任何建议表示赞赏 谢谢 My code func indexP
  • iOS 11 浮动 TableView 标题

    有一个应用程序包含多个部分 展开 时每个部分有几行 折叠 时没有 每个部分都有一个部分标题 使用以下子类重用它们UITableViewHeaderFooterView等等 到目前为止一切顺利 然后在 iOS 11 中 我使用了可视化调试器
  • 在 Swift 中将动态 Int 变量从一个类传递到另一个类

    我是 swift 2 的新手 我陷入了将变量从一个类传递到另一个类的过程中 我有一个类 GameScene 我有一个公共变量score并且在更新功能中不断更新 我想发送score两个节点相互碰撞时的值 一旦它发生碰撞 我就会使用 mainv
  • 无需 iPhone 6 Plus 即可预览 iOS 应用程序

    我已经在 Yosemite 中使用 iPhone 6 和 Quicktime 完成了 iOS 应用程序预览 视频 但我无法在 iTunes Connect 中为 iPhone 6 上传它 而且我没有 iPhone 6 设备 有没有办法在没有
  • 如何在 Swift Playgrounds 中获得弹出对话框

    我想知道如何在 Swift 中弹出一个对话框游乐场 是的 必须在 Playgrounds 中 我尝试了以下代码 直接来自 AppleDevs 站点 然而 无论我如何尝试 self tag always抛出错误 谁能帮我这个 import U
  • iOS 设置 MKMapView 中心,因此提供的位置位于底部中心

    我有一个 MKMapView 和一个永不改变的 CLLocationCooperative2D 我想做的是将地图居中 以便该坐标将放置在地图的底部中心 我可以用简单的方法将地图集中在这个坐标上 MKCoordinateRegion view
  • NSDateFormatter:根据 currentLocale 的日期,不包含年份

    这不会太难吧 我想显示不带年份的日期 例如 8 月 2 日 美国 或 02 08 德国 它也必须适用于许多其他语言环境 到目前为止 我唯一的想法是对年份进行正常格式 然后从生成的字符串中删除年份部分 我认为你需要看一下 NSString d
  • 将语音添加到自定义 UIMenuController

    我创建了一个自定义UIMenuController in a UIWebView但它似乎摆脱了 说出选择 选项UIMenuController在那之后 所有测试设备上的 偏好设置 中都打开了发言选择选项 并且它出现在其他应用程序中 包括非
  • 如何从 Firebase 同步检索数据?

    我有两个集合 即用户和问题 根据使用 userId 登录的用户 我检索currQuestion价值来自users收藏 基于currQuestion值 我需要检索question来自 Firebase 的文档Questions收藏 我使用下面
  • iOS 使用 NSColor 与 UIColor?

    有什么区别UIColor and NSColor 什么时候会使用每一种 我碰到NSColor在试图弄清楚的同时UIColor用于 iOS 中的属性字符串 我理解使用UIColor对于 UIKit 等 但我不认为NSColor对于这种事情确实
  • 使用 nib 作为带有 nib 类的表节标题

    我想创建一个加载 nib 文件并将其设置为标题 UIView 的节标题 这个 nib 文件还将有一个关联的类 其中插座和操作连接到 因此我想像平常一样使用 nib 加载该类 我在网上搜索并找到了几个类似的答案 但我找不到任何适合我的答案 经
  • 来自索引范围 Swift 的新数组

    我怎样才能做这样的事情 从数组中取出前 n 个元素 newNumbers numbers 0 n 目前出现以下错误 error could not find an overload for subscript that accepts th

随机推荐

  • C++ 默认赋值运算符

    int a 10 int b 10 a b struct test int a 10 test a b a b 第一个代码无法编译 因为我们无法分配数组 但第二个代码可以 类的默认赋值运算符不是简单地为每个数据成员调用赋值吗 为什么第二个代
  • MySQL:用户“userName”@“localhost”的访问被拒绝

    我在使用 phpMyAdmin 创建用户并授予用户权限时遇到问题 我有一个 Java swing 应用程序 它需要连接到该数据库 下面是我如何创建用户并授予权限的逐步说明 打开 phpMyAdmin 转到 用户 选项卡 点击Add New
  • 无法使用 Angular 和 Spring Security 设置身份验证标头

    我在让 Angular CORS SpringSecurity 和基本身份验证正常运行时遇到困难 我有以下 Angular Ajax 调用 我试图将标头设置为在请求中包含基本授权标头 var headerObj headers Author
  • java.lang.noclassdeffound错误:org.ksoap2.serialization.SoapObject

    我收到这个 no class def 错误 org ksoap2 serialization SoapObject自从我更新了 Eclipse ADT 插件和 SDK 管理器后就出现错误 我正在使用ksoap2 android assemb
  • java中另一个类可以调用类的main()方法吗

    Can a main java中另一个类可以调用类的方法吗 e g class class1 public static void main String args class class2 public static void main
  • 在 ASP.NET 控件中访问全局资源

    meta resourcekey WizardStep1Resource1 这就是我用来访问App LocalResources 我如何访问资源App GlobalResources 解决方案 创建一个名为Globalresource re
  • Yii2:如何使用 301 重定向旧 URL?

    由于 SEO 目的 我想将旧版本网站中的一些 URL 重定向到 Yii2 中的新版本 例如 about us php to about 我怎么做 我不能使用 htaccess 而且我不能使用urlManager规则 因为需要设置HTTP响应
  • 如何发送带有变量的 GraphQL AJAX 查询?

    我正在尝试使用 GraphQL 对 GitHub 进行 API 调用 我已经能够使用静态 graphQL 调用成功地调用数据 但是我在调 用中添加变量 var 条目 时遇到问题 以便我可以基于更改调用用户在网络应用程序中提供的输入 我使用
  • 索引操作到底发生了什么?

    今天我正在为一个包含 20 亿条记录的巨大表建立索引 我以为 MySQL 会吃掉我的 2TB 驱动器 磁盘消耗不断增加到 400GB 然后是 500GB 最后下降到 180GB MySQL 说成功添加了索引 为什么空间会增加 最后发生了什么
  • 当我从 NSManagedObjectContext 获取数据时出现错误

    我运行我的应用程序 然后获取我的数据 数据没问题 当我第二次跑步时 我对自己的旧价值观产生了错误 怎么了 BOOL application UIApplication application didFinishLaunchingWithOp
  • 将 Java 代码移植到 ObjC 时,如何最好地表示已检查的异常?

    我正在致力于将 Java 代码库移植到 Cocoa Objective C 以在桌面 Mac OS X 上使用 Java 代码有lots and lots带有检查异常的方法 例如 double asNumber throws FooExce
  • 使用 RVM 在 Ubuntu 上安装 Rails Path

    我是一个运行 Ubuntu 10 04 并尝试安装 Rails 的 Linux 菜鸟 我首先安装了ruby 然后安装了RVM 然后下载并安装了rubygems 然后安装了rails Rails 似乎只有在命令前面有 sudo 时才会响应 如
  • 如何将列表视图中行的值传递给按钮

    我创建了一个自定义listview using SimpleAdapter and in 列表视图的每一行我都放了一个按钮有单一 ID 我想要得到position每行传递按钮 但我每行都有一个按钮 id 我想要当我点击按钮它找到行的位置并开
  • 找到最大的素数因子?

    我需要找到 13195 的质因数是 5 7 13 和 29 最大的是377 数字 600851475143 的最大质因数是多少 include
  • HTTP 错误 500.31 - ANCM 无法在 IIS 中找到本机依赖项

    我尝试运行一个Blazor应用 Web Server runs NET Core 3 0 Web Client runs NET Standard 2 0 Web Shared runs NET Standard 2 0 发布并上传应用程序
  • 在与表单相同的模态窗口中加载 php 成功消息

    您好 我正在尝试让我的 php 表单成功 或错误 消息加载到表单实际所在的模态窗口中 我想只在模态中打开表单 而不必以任何原因切换页面 我一直在搜索 S O 但找不到类似的东西 也许我没有问正确的问题 我不知道 我的代码目前如下所示 编辑
  • 抽象 CRUD 控制器是个好主意吗?

    我们正在使用 ASP NET MVC 开发一个相当大的应用程序 一开始我们发现拥有一个具有常见 CRUD 操作 新建 保存 删除 以及默认列表操作的抽象基本控制器可能很有用 在我们的例子中 我们有 20 多个实体通过这种控制器进行管理 这有
  • HTML 代码检查 PhpStorm 中分成多个文件的块

    有没有办法告诉 PhpStorm 仅评估 header php 和 footer php 就像浏览器在运行 index php 时所做的那样 考虑一个包含 4 个文件的项目 index php 服务器端内容 业务逻辑 header php
  • Android:如何检测用户何时停止对着麦克风说话

    我有一个 Android 应用程序 在应用程序启动时开始从麦克风录音 在我当前的版本中 用户必须按 停止 按钮才能停止录制 如何检测用户已停止说话并使用它来触发录音机停止 类似于 Android 中语音识别功能的实现 用户停止说话 然后语音
  • 使用类似“标签”的单元格设置集合视图

    我一直在与客户合作UICollectionViewFlowLayout调整细胞之间的空间 这样我就可以在我的细胞中获得良好的流动collectionView 但使用我当前的代码 我无法弄清楚如何在不 破坏 行数的情况下调整单元格大小 这使得