ios - 流布局中的 UICollectionView 单元格边框

标签 ios ipad uicollectionview uicollectionviewlayout

我正在使用 UICollectionView 布置一堆单元格,这些单元格按标题的第一个字母划分。每个单元格周围应该有一个非常细的边框,节标题应该有上下边框。这是我当前的原型(prototype):

Grid of large equally-sized cells, four to a row, with slim light gray headings between sections. Narrow gray borders show the edges of the cells and dividers.

我按照以下规则实现当前外观:

  1. 描边每个单元格的右边缘和下边缘。
  2. 描边每个部分标题的底部边缘。

这很接近我想要的,但是有两个缺陷:

  1. 如果部分标题前的行未满,则标题顶部的边框会在屏幕右边缘附近停止。
  2. 在此屏幕截图中不可见,但如果一行 已满,该行中最后一个单元格的右边框仍会绘制,这在屏幕边缘看起来有点奇怪。

解决这个问题的最佳办法是以某种方式告诉每个单元格它是在一个部分的最后一行还是一行中的最后一个单元格;然后单元格将关闭有问题的边框,部分标题将绘制顶部边框和底部边框,一切都将变得很简单。不过,我不知道如何实现。

关于如何管理它的任何想法,或其他获得我想要的外观的方法?我目前正在使用 UICollectionViewFlowLayout。

最佳答案

我结束了 UICollectionViewFlowLayout 的子类化,并在流布局计算了每个单元格的属性后应用了几种启发式方法:

  1. 如果 center.y 等于该部分中最后一项的 center.y,则该单元格位于该部分的最后一行。
  2. 如果 CGRectGetMaxY(frame) 等于 CGRectGetMaxY(self.collectionView.bounds),则单元格再次位于 Collection View 的右边缘。

然后我将这些计算的结果存储在 UICollectionViewLayoutAttributes 的子类中,并编写了一个 UICollectionViewCell 子类,其 -applyLayoutAttributes: 方法将调整其背景 View 根据附加属性绘制的边框。

我把整个乱七八糟的东西都放进了fairly enormous gist这样你就可以准确地看到我做了什么。快乐的黑客。

关于ios - 流布局中的 UICollectionView 单元格边框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17592640/

相关文章:

iphone - Objective-C RabbitMQ 客户端未接收消息

iphone - iOS:如何执行 HTTP POST 请求?

iphone - xcode中*.mode1v3文件的作用是什么?

javascript - 在 iPad 上从 "src"事件更改图像元素的 "touchend"?

ios - 如何在滚动时隐藏和显示带有动画效果的标题 View

cocoa - 将 iOS 移植到 Mac,创建 GUI、HOMEKIT 还是 Chameleon?

IOS/objective-C : Set property in presenting view controller

iphone - 变量不是 CFString

ios - fatal error : Index out of range when downloading data from the Internet

ios - 从选定的 Collection View 单元格获取信息