UITableView 重叠单元格(力)
UITableView overlap cells (force)
我想实现 table 视图单元格重叠,因为我想实现这种效果:
所以基本上细胞会一个接一个地堆叠。我的目标是 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;
in init
这样就不会剪裁了。现在单元格在第一次渲染时会被剪裁,但是当我向下滚动 table 视图然后再次向上滚动以便它再次显示单元格时,它们不会被剪裁。
我已经尝试将 backgroundColor
设置为在 willDisplayCell
中清除,但没有成功。还尝试递归遍历所有单元格子视图并将裁剪设置为 NO 但同样的事情再次发生。还尝试了黑客攻击并强制设置 setNeedsDisplay
以便重新渲染但没有成功。
如能就此问题提供任何帮助,我们将不胜感激。
它不应该是一个 TableView。
试试这个库:TGLStackedViewController
我前段时间遇到了同样的问题。
对我有用的解决方案是使用集合视图而不是 TableView。通过从 UICollectionViewFlowLayout 扩展它来创建自定义 class,然后在您的 Collection View 中使用它。
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
开发者文档
This property is used to determine the front-to-back ordering of items
during layout. Items with higher index values appear on top of items
with lower values. Items with the same value have an undetermined
order. The default value of this property is 0.
希望对您有所帮助! :)
我想实现 table 视图单元格重叠,因为我想实现这种效果:
所以基本上细胞会一个接一个地堆叠。我的目标是 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;
in init
这样就不会剪裁了。现在单元格在第一次渲染时会被剪裁,但是当我向下滚动 table 视图然后再次向上滚动以便它再次显示单元格时,它们不会被剪裁。
我已经尝试将 backgroundColor
设置为在 willDisplayCell
中清除,但没有成功。还尝试递归遍历所有单元格子视图并将裁剪设置为 NO 但同样的事情再次发生。还尝试了黑客攻击并强制设置 setNeedsDisplay
以便重新渲染但没有成功。
如能就此问题提供任何帮助,我们将不胜感激。
它不应该是一个 TableView。
试试这个库:TGLStackedViewController
我前段时间遇到了同样的问题。
对我有用的解决方案是使用集合视图而不是 TableView。通过从 UICollectionViewFlowLayout 扩展它来创建自定义 class,然后在您的 Collection View 中使用它。
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
开发者文档This property is used to determine the front-to-back ordering of items during layout. Items with higher index values appear on top of items with lower values. Items with the same value have an undetermined order. The default value of this property is 0.
希望对您有所帮助! :)