Gre*_*reg 13 uitableview uiview ios uicollectionview uicollectionviewlayout
如何在UICollectionView中获得带有边框线的像素完美的一(1)像素(例如,制作月历).问题在于细胞相遇,它们的边界相遇,所以它实际上是2个像素(不是1个像素).
因此,这是与CollectionView布局相关的问题/问题.正如每个单元格所拥有的方式一样,当单元格全部满足零间距时,会出现1像素边框,整体看起来像2像素边框(除了collectionView的外边缘,这将是1像素)
寻求使用什么方法/代码来解决这个问题.
这是我使用的自定义UICollectionViewCell类,我使用drawrect将边框放在这里的单元格上.
import UIKit
class GCCalendarCell: UICollectionViewCell {
@IBOutlet weak var title : UITextField!
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(frame: CGRect) {
super.init(frame: frame)
}
override func drawRect(rect: CGRect) {
self.layer.borderWidth = 1
self.layer.borderColor = UIColor.redColor().CGColor
}
}
Run Code Online (Sandbox Code Playgroud)
您可以采取一些策略来解决此问题.哪个最好取决于您的布局的一些细节.
在每个项目周围绘制所需宽度的1/2边框.有人建议这样做.它实现了项目之间边框的正确宽度,但是集合边缘周围的边框也将是所需宽度的一半.要解决此问题,您可以在整个集合或部分周围绘制边框.
如果你是月份布局只渲染给定月份的天数,意味着每个月都有一个独特的非矩形形状,修复边缘边框比它的价值更复杂.
绘制每个项目周围的完整边框,但调整框架使它们重叠边框宽度的一半,从而隐藏冗余.
这是最简单的策略并且效果很好,但请注意以下几点:
您可以在容器周围添加边框,然后在超级视图中手动绘制边框,而不是在单元格上使用边框.这可以通过覆盖drawRect(_:)和使用UIBezierPaths在单元格的间隔处绘制水平和垂直线来实现.这是最手动的选择.它可以让您获得更多控制权,但需要更多工作.
不是指定图层的边框宽度和边框颜色(在整个视图周围绘制边框),而是选择性地绘制单元格的边缘.例如:每个单元格只能绘制它的底部和右边缘,除非上面或右边没有单元格.
如果您有不规则网格,这可能会再次导致并发症.它还要求每个单元格了解网格中需要更多结构的上下文.如果你走这条路线,我会建议继承UICollectionViewLayoutAttributes并添加关于应该绘制哪些边的附加信息.边缘绘制本身可以通过为每个边创建UIBezierPath's in 来完成drawRect(_:).
| 归档时间: |
|
| 查看次数: |
5713 次 |
| 最近记录: |