首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Uicollectionview单元格仅在文本周围换行

UICollectionView是iOS开发中常用的视图容器,用于展示多个可滚动的单元格。每个单元格可以包含不同类型的内容,包括文本、图像、按钮等。

在UICollectionView中,单元格的布局由UICollectionViewLayout决定。UICollectionViewLayout定义了单元格的大小、位置和排列方式。常用的布局包括UICollectionViewFlowLayout和UICollectionViewCompositionalLayout。

对于需要在文本周围换行的UICollectionView单元格,可以通过自定义单元格的布局来实现。一种常见的做法是使用自定义的UICollectionViewFlowLayout,并在单元格的布局中设置文本的换行方式。

以下是一个示例的UICollectionViewFlowLayout的子类,用于实现在文本周围换行的效果:

代码语言:txt
复制
class WrapTextFlowLayout: UICollectionViewFlowLayout {
    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let attributes = super.layoutAttributesForElements(in: rect)
        
        for attribute in attributes ?? [] {
            if attribute.representedElementKind == nil {
                let indexPath = attribute.indexPath
                if let cellAttributes = layoutAttributesForItem(at: indexPath) {
                    attribute.frame = cellAttributes.frame
                }
            }
        }
        
        return attributes
    }
    
    override func layoutAttributesForItem(at indexPath: IndexPath) -> UICollectionViewLayoutAttributes? {
        let currentItemAttributes = super.layoutAttributesForItem(at: indexPath)?.copy() as? UICollectionViewLayoutAttributes
        
        guard let collectionView = collectionView else {
            return currentItemAttributes
        }
        
        let sectionInset = evaluatedSectionInsetForItem(at: indexPath.section)
        let isFirstItemInSection = indexPath.item == 0
        let layoutWidth = collectionView.frame.width - sectionInset.left - sectionInset.right
        
        if isFirstItemInSection {
            currentItemAttributes?.leftAlignFrame(withSectionInset: sectionInset)
            return currentItemAttributes
        }
        
        let previousIndexPath = IndexPath(item: indexPath.item - 1, section: indexPath.section)
        guard let previousFrame = layoutAttributesForItem(at: previousIndexPath)?.frame else {
            return currentItemAttributes
        }
        
        let previousFrameRightPoint = previousFrame.origin.x + previousFrame.width
        let currentFrame = currentItemAttributes?.frame ?? CGRect.zero
        let strecthedCurrentFrame = CGRect(x: sectionInset.left,
                                           y: currentFrame.origin.y,
                                           width: layoutWidth,
                                           height: currentFrame.size.height)
        
        let isFirstItemInRow = !previousFrame.intersects(strecthedCurrentFrame)
        
        if isFirstItemInRow {
            currentItemAttributes?.leftAlignFrame(withSectionInset: sectionInset)
            return currentItemAttributes
        }
        
        var frame = currentItemAttributes?.frame ?? CGRect.zero
        frame.origin.x = previousFrameRightPoint + evaluatedMinimumInteritemSpacingForSection(at: indexPath.section)
        currentItemAttributes?.frame = frame
        return currentItemAttributes
    }
    
    private func evaluatedSectionInsetForItem(at index: Int) -> UIEdgeInsets {
        if let delegate = collectionView?.delegate as? UICollectionViewDelegateFlowLayout,
           let inset = delegate.collectionView?(collectionView!, layout: self, insetForSectionAt: index) {
            return inset
        } else {
            return sectionInset
        }
    }
    
    private func evaluatedMinimumInteritemSpacingForSection(at index: Int) -> CGFloat {
        if let delegate = collectionView?.delegate as? UICollectionViewDelegateFlowLayout,
           let spacing = delegate.collectionView?(collectionView!, layout: self, minimumInteritemSpacingForSectionAt: index) {
            return spacing
        } else {
            return minimumInteritemSpacing
        }
    }
}

extension UICollectionViewLayoutAttributes {
    func leftAlignFrame(withSectionInset sectionInset: UIEdgeInsets) {
        var frame = self.frame
        frame.origin.x = sectionInset.left
        self.frame = frame
    }
}

使用上述自定义布局类,可以实现在UICollectionView单元格中文本周围换行的效果。在实际使用时,可以将该布局类应用于UICollectionView,并设置相应的文本内容。

对于在腾讯云上部署和运行相关应用,可以考虑使用腾讯云的云服务器CVM、云数据库MySQL、云存储COS等产品。具体推荐的产品和产品介绍链接如下:

  • 腾讯云服务器CVM:提供弹性计算能力,支持多种操作系统和应用场景。了解更多:腾讯云服务器CVM
  • 腾讯云数据库MySQL:高性能、可扩展的关系型数据库服务。了解更多:腾讯云数据库MySQL
  • 腾讯云存储COS:安全可靠的对象存储服务,适用于存储和处理大规模非结构化数据。了解更多:腾讯云存储COS

注意:以上推荐的腾讯云产品仅作为示例,实际选择应根据具体需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

VBA小技巧14:拆分带有换行单元格中的文本

学习Excel技术,关注微信公众号: excelperfect 在Excel中,我们可以使用“分列”功能(即“文本到列”),很容易地将单元格中带有特定分隔符的文本拆分到不同的列中。...但是,对于使用组合键换行文本,不能够使用这个功能。例如,下图1所示的单元格中的数据,想要将其拆分到不同的列中,“分列”功能对其无效。...下面的VBA代码将当前单元格中以换行符分隔的文本拆分到其相邻单元格中,如下图2所示。...图2 代码如下: Sub SplitText() '拆分当前单元格中使用换行符分隔的文本 Dim varSplit As Variant Dim lngTotal As Long...Chr(10)代表换行符。 然后,将拆分的值放置到当前单元格相邻的单元格区域中。

4.4K30
  • HTML中的标记

    定义表格 caption>>定义表格标题 tbody>>定义表格主体 thead>>定义表格头部 tfoot>>定义表格中的表注内容(脚注) tr>>定义表格中的行 th>>定义表格中的表头单元格...行内元素 br>>定义换行 a>>定义超链接 i>>定义文字倾斜 b>>定义文字加粗 em>>定义文字倾斜,语义更加强调 abbr>>定义缩写 bdi>> 定义文本文本方向,使其脱离其周围文本的方向设置...bdo>>定义文字方向 cite>>定义引用 code>>定义计算机代码文本 dfn>>定义定义项目 ins>>定义被插入文本 kbd>>定义键盘文本 Mark>>定义有记号的文本 q...strong>>定义语气更为强烈的强调文本,文字加粗 sup>>定义上标文本 sub>>定义下标文本 time>>定义日期/时间 var>>定义文本的变量部分 wbr>>定义可能的换行符...button>>定义按钮 select>>定义选择列表(下拉列表) iframe>>定义内联框架 canvas>>定义图形 td>>定义表格中的单元格

    5.6K30

    CSS大部分属性汇总

    block 此元素将显示为块级元素,此元素前后会带有换行符。 inline 默认。此元素会被显示为内联元素,元素前后没有换行符。 inline-block 行内块元素。...table 此元素会作为块级表格来显示,表格前后带有换行符。 inline-table 此元素会作为内联表格来显示,表格前后没有换行符。...此元素会作为一个或多个行的分组来显示 table-row 此元素会作为一个表格行显示 table-column-group 此元素会作为一个或多个列的分组来显示 table-column 此元素会作为一个单元格列显示...table-cell 此元素会作为一个表格单元格显示 table-caption 此元素会作为一个表格标题显示 inherit 规定应该从父元素继承 display 属性的值。...CSS浮动 属性 描述 值 clear 指定不允许元素周围有浮动元素。 left、right、both、none、inherit float 指定一个盒子(元素)是否可以浮动。

    1.3K20

    前端语言基础【第一篇:HTML5 & CSS】

    (一) HTML5:超文本标记语言 (1) 基本概念 是由一系列成对出现的元素标签(标记)嵌套组合而成 ( XML也是标签构成的 ) 这些标签以的形式出现,用于标记文本内容的含义 浏览器通过元素标签解析文本内容并将结果显示在网页上... 换行标签用于在当前位置产生一个换行,相当于一次回车键所 产生的效果。...数字 设置文字背景和周围其他元素的空白间距的绝对值 loop 设置移动文字的循环次数 infinite、正整数 文字移动无限次、文字移动n次 sscrollmount 设置移动文字每次移动的距离 数字...cellspacing:定义单元格之间的距离。...标签 标签通常作为文本的容器,它没有特定的含义和样式,只有与CSS同时使用才可以为指定文本设置样式属性。

    1.8K20

    Excel单元格内如何换行,这几招快拿小本本记下来

    Excel单元格如何换行?我们在日常的数据统计中经常会遇到的问题。我们会遇到单元格太小导致输入的内容无法显示的情况。是不是苦恼?...其实我们可以通过自动换行的方式将数据在单元格中以多行的方式显示,也就是excel单元格换行。那么下面我就来教大家几招,记得拿小本本记下来哦。...第二招:直接点击自动换行 推荐指数:★★★★ 在单元格A1中输入文字,在需要换行的时候点击开始界面中的“自动换行”就可以了”。...第三种:格式设置 推荐指数:★★★★★ 在单元格A1输入文字,然后点击开始界面中的“格式”选择“设置单元格格式”在对齐里点击“自动换行”,最后点击确定就可以了。...第四招:利用文本框 推荐指数:★★★ 在插入界面里找到“文本”点击“文本栏”,然后在“设置形状格式”里的文本选项中点击“形状中的文字自动换行”,然后输入文字就可以自动换行了。

    1.1K20

    【学习】如何快速批量删除Excel单元格中的“换行符”

    如果许多单元格中都包含这样的“换行符”,现在要将其全部删除掉,让这些单元格中的内容都变成一行显示,该如何操作呢?...方法一:取消自动换行 在Excel单元格中按快捷键Alt+Enter进行换行时,该单元格就被设置成了“自动换行”,如果要将这些单元格中的“自动换行”效果取消,也就是删除“换行符”,方法如下:...但这种方法有个缺点,当选择这些单元格时,编辑栏中的内容仍是换行的,而且双击该单元格又会自动变成“自动换行”了。...需要注意的是这样输入后,在“查找内容”后的文本框中不会显示任何内容,但实际上是有的; Step3:单击“全部替换”按钮,换行符将被全部替换。...方法三:用CLEAN函数 CLEAN函数可以删除文本中不能打印的字符。假如A1单元格包含换行符,可在B1单元格中输入公式:“=CLEAN(A1)”,即可删除换行符。

    17.8K30

    根据标准word模板生成word文档类库(开源)

    2.填充域作为段落时可填充文本、图片和表格,还可以通过AddContentLine方法在填充文本和图片后换行; 3.表格单元格时可填充文本、图片,还可以通过单元格CellInfo对象的AddContentLine...方法在填充文本和图片后换行。...(填充内容后换行)方法填充文本和图片; 3.Tbl属性的TblType变量表示该表格是仅含水平表头(HORIZONTAL_HEADER)还是含水平和垂直表头(HORIZONTAL_VERTICAL_HEADER...4.根据需要将文本(TxtInfo对象)、图片(ImgInfo对象)和表格(TblInfo对象)通过调用填充域(TagInfo对象)的AddContent和AddContentLine(填充内容后换行)...: 行合并数(默认为1) 方法如下: AddContent: 添加填充内容 AddContentLine: 添加填充内容并换行 TableStructureInfo: 表格单元格类型的填充域类

    2.4K60

    CSS学习笔记一

    line-through:为文本添加删除线 blink:为文本添加闪烁效果 处理空白符: white-space属性: 文档中对 空格、换行、tab字符的处理 下面的表格总结了 white-space...属性的行为: 值 空白符 换行符 自动换行 pre-line 合并 保留 允许 normal 合并 忽略 允许 nowrap 合并 忽略 不允许 pre 保留 保留 不允许 pre-wrap 保留 保留...text-align 对齐元素中的文本。 text-decoration 向文本添加修饰。 text-indent 缩进元素中文本的首行。 text-shadow 设置文本阴影。...border-spacing 设置分隔单元格边框的距离。 caption-side 设置表格标题的位置。 empty-cells 设置是否显示表格中的空单元格。...轮廓样式: outline属性:在元素周围绘制一条线 outline-color属性:设置轮廓的颜色 outline-style属性:设置轮廓的样式 outline-width属性:

    3.3K10

    html学习笔记第二弹

    th(表头单元格)标签 一般表头单元格位于表格的第一行或第一列,表头单元格里面的文本内容加粗居中显示.标签表示HTML表格的表头部分(table head的缩写)。...属性名 属性值 描述 align left,center,right 规定表格相对周围元素的对其方式 border 1或"" 规定表格单元是否拥有边框,默认为"",表示没有边框 cellpadding...,默认2像素单元格单元格之间的距离 cellpadding 像素值 规定单元边沿与其内容之间的空白,默认1像素 align left,center,right 规定表格相对周围元素的对其方式 colspan...2 … 注意事项: 里面只能包含和 和个数没有限制,经常是一个对应多个 定义列表的列表项内部可以使用段落、换行符...在表单元素中,标签是用于定义多行文本输入的控件。 使用多行文本输入控件,可以输入更多的文字,该控件常见于留言板,评论。

    3.9K10

    html学习笔记第二弹

    th(表头单元格)标签 一般表头单元格位于表格的第一行或第一列,表头单元格里面的文本内容加粗居中显示.标签表示HTML表格的表头部分(table head的缩写)。...属性名 属性值 描述 align left,center,right 规定表格相对周围元素的对其方式 border 1或"" 规定表格单元是否拥有边框,默认为"",表示没有边框 cellpadding...,默认2像素单元格单元格之间的距离 cellpadding 像素值 规定单元边沿与其内容之间的空白,默认1像素 align left,center,right 规定表格相对周围元素的对其方式 colspan... … 注意事项: 里面只能包含和 和个数没有限制,经常是一个对应多个 定义列表的列表项内部可以使用段落、换行符...在表单元素中,标签是用于定义多行文本输入的控件。 使用多行文本输入控件,可以输入更多的文字,该控件常见于留言板,评论。

    9410

    换行合并的内容复制到word里怎么有一堆双引号,怎么办?

    昨天发表了文章《如何将多项内容动态合并成一个单元格换行显示?为什么上传到Excel却没有换行?》,解决了用换行符合并内容的问题。...但是…… 因为很多朋友通过Excel合并相应的内容,最终目的是要将换行合并后的内容复制粘贴到word里去,但是,当复制粘贴的时候,发现换行合并的内容都带着双引号!...但不要误解是在PQ将数据上传到Excel的时候带的双引号,而是在将数据从Excel复制到Word时,为了保护单元格内容(含有特殊符号时)的相对完整性而加上的。...分两种情况: - 1 - 只复制某个单元格的内容 这个其实很简单,不要直接复制单元格,而是双击进单元格后,选择单元格的内容进行复制即可,如下动画所示: - 2 - 同时复制多个合并单元格的内容...此时,只能选中单元格后进行复制,但不要直接以粘贴文本的方式粘贴到word里,而是先粘贴为表格,然后再在word里复制粘贴为文本即可。

    2.3K30

    【Web世界探险家】HTML5 探索与实践

    特点: 文本在一个段落中会根据浏览器的窗口的大小自动换行 段落与段落之间包有空隙 <!...在 HTML 中文本不能像记事本一样用“回车”换行,在 HTML 中文本使用“回车”来换行只会出现一个空格。...在 HTML 中,一个段落中的文字会从左到右依次排列,直到浏览器窗口的右端,然后才自动换行。如果希望 某段文本强制换行显示,就需要使用换行标签 。...>标签中,即数据单元格的内容 2.8.3 表格属性 属性名 属性值 描述 align left、center、right 规定表格相对周围元素的对齐方式 border 1或者"" 规定表格单元是否拥有边框...合并单元格的方式: 跨类合并:rowspan=“合并单元格的个数”,最上侧单元格为目标单元格, 写合并代码 跨列合并:colspan=“合并单元格的个数”,最左侧单元格为目标单元格, 写合并代码 <!

    8710

    Excel技巧:快速处理单元格内的换行

    工作表中有多个单元格中都存在在不同行显示内容,而我们需要删除这些换行符,将内容显示在一行。如何快速处理呢?...如果“替换为”文本框中的内容为空,将删除换行符,如果在“替换为”文本框中输入空格(或任何想要的字符),所有换行符将被空格(或选择的字符)替换。...使用VBA 下面的代码使用了Selection,因此它只在选定的单元格上执行。此外,代码关闭了“换行”命令,让你可以很容易地看到代码的效果。代码本身非常简单,实际上使用了Excel的查找和替换工具。...xlByColumns, _ MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End Sub 接下来,探讨按换行符拆分单元格内容的技术...图1 选择要拆分的单元格,单击功能区“数据”选项卡中的“分列”命令,在“文本分列向导”第2步中的“分隔符号”选择“其他”,使用Ctrl+J或Alt+0010插入换行符,如下图2所示。

    2.8K20
    领券