我想要实现的目标:在UITableView
灰色的最底部单元格中制作所有标签,并在向上滚动时将其更改回原始颜色。换句话说,一种渐变效果,只是所有标签颜色都必须是灰色的
我取得的成就:在数组中添加了原始颜色并尝试确定底部的哪个单元格(使用visibleCells
),然后更改其标签颜色。但是很多代码依赖于手动确定偏移量,因此对我来说似乎很可怕
我尝试了什么:添加CAGradientLayer
。但它会使细胞逐渐消失。我希望单元格中的标签变灰。相似,但不一样
注意:单元格是一个带有标签,按钮甚至是简单UITableView
的自定义单元格,我需要在某处存储所有这些颜色,然后应用灰色直到单元格位于底部。一旦它向上滚动,我将不得不重新为所有子视图着色。
任何人都可以提出更好的方法来实现这一切吗?
添加问题:正如下面的@Bamsworld所建议的那样,是否有一种混合模式可以帮助我实现这一点,即一种混合模式可以将所有底层文本呈现为灰色?我知道多重混合模式,但对其他模式只有微弱的想法。
答案 0 :(得分:0)
因为 UITableViewDelegate 协议符合 UIScrollViewDelegate ,您可以添加方法 scrollViewDidScroll:来检测表格何时滚动并处理内部的任何单元格更改这种方法。
示例:(假设一个名为testTable的表视图)
// detect when it scrolls
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// query visible cells and get how many
int numCellsOnShow = [[testTable visibleCells] count];
// get the cell to change at bottom of table (this will be the last one in the array of visible cells)
UITableViewCell *cellToEdit = [[testTable visibleCells] objectAtIndex:numCellsOnShow - 1];
cellToEdit.textLabel.textColor = [UIColor grayColor];
// revert top and second bottom cells to prevent cell aesthetic bleeding
UITableViewCell *cellToRevert = [[testTable visibleCells] objectAtIndex:numCellsOnShow - 2];
cellToRevert.textLabel.textColor = [UIColor blackColor];
UITableViewCell *topCell = [[testTable visibleCells] objectAtIndex:0];
topCell.textLabel.textColor = [UIColor blackColor];
}
在上面的代码中,我只更改了标题 textLabel 颜色,但可以执行任意数量的更改/更改。
注意:如果您的表视图高度不是tableViewCell高度的倍数(假设表中单元格的常量维度),您可能决定将底部两个单元格灰化,因为底部单元格可能几乎看不到,即使它包含在visibleCells数组中。