UITableView重叠单元格(强制)

时间:2015-09-03 09:04:48

标签: ios objective-c uitableview calayer

我想完成一个表视图单元重叠,因为我想完成这个效果:

stacking

所以基本上细胞会堆叠在一起。我的目标是iOS7 +(目前正在使用iOS8进行测试)。

我目前正在CAGradientLayer进行layoutSubviews定位。我定位它:

CGRect gradientLayerFrame = self.contentView.bounds;
gradientLayerFrame.origin.y = -6.0f;
gradientLayerFrame.size.height += 6.0f;
self.gradientLayer.frame = gradientLayerFrame;

我也做了

self.clipsToBounds = NO;
self.contentView.clipsToBounds = NO;
self.contentView.superview.clipsToBounds = NO;
init

,这样就不会有任何内容。现在,单元格在第一次渲染时剪辑,但是当我向下滚动表格视图然后再向上滚动以便再次显示单元格时,它们不会被剪裁。

我已经尝试设置backgroundColor以清除willDisplayCell但没有运气。还尝试递归遍历所有单元格子视图并将裁剪设置为NO,但重复同样的事情。还尝试了黑客攻击并强行设置setNeedsDisplay以便重新渲染事物但没有运气。

非常感谢有关此问题的任何帮助。

2 个答案:

答案 0 :(得分:2)

它不应该是TableView。

试试此库:TGLStackedViewController

答案 1 :(得分:1)

一段时间后我遇到了同样的问题。

对我有用的解决方案是使用Collection视图而不是TableView。通过从UICollectionViewFlowLayout扩展自定义类并在集合视图中使用它来创建自定义类。

class OverlappedCustomFlowLayout: UICollectionViewFlowLayout {
    override func prepare() {
        super.prepare()

        // This allows us to make intersection and overlapping
        // A negative number implies overlapping whereas positive implies space between the adjacent edges of two cells.
        minimumLineSpacing = -100
    }

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? {
        let layoutAttributes = super.layoutAttributesForElements(in: rect)
        for currentLayoutAttributes: UICollectionViewLayoutAttributes in layoutAttributes! {

            // zIndex - Specifies the item’s position on the z-axis. 
            // Unlike a layer's zPosition, changing zIndex allows us to change not only layer position, 
            // but tapping/UI interaction logic too as it moves the whole item.
            currentLayoutAttributes.zIndex = currentLayoutAttributes.indexPath.row + 1
        }
    }

    return layoutAttributes
}

P.S。 - 根据Apple的zIndex

开发人员文档
  

此属性用于确定项目的前后排序   在布局期间。索引值较高的项目显示在项目的顶部   价值较低。具有相同值的项目未确定   订购。此属性的默认值为0.

希望它有所帮助! :)