ios - 如何在 UITableView 本身上设置 DropShadow

标签 ios swift uitableview

我正在尝试在以编程方式添加的 UITableView 上设置投影。

框架高度被设置为屏幕的一定百分比。所以我想在桌面 View 本身上设置一个投影。

我尝试执行以下操作:

tableview_results.layer.shadowPath = UIBezierPath(rect: tableview_results.frame).cgPath
tableview_results.layer.shadowColor = UIColor.black.cgColor
tableview_results.layer.opacity = 1
tableview_results.layer.shadowOffset = CGSize.zero
tableview_results.layer.shadowRadius = 10

但是这似乎没有任何作用。

当我尝试寻找解决方案时,我只找到有关如何在 UITableView 的最后一个单元格上设置阴影的内容。然而,这对我来说不起作用,因为只有在显示最后一个单元格时才会显示阴影。

我需要阴影始终出现在 UITableView 上。

最佳答案

阴影路径应设置为tableview_results.bounds而不是frame。边界是 TableView 本身坐标系中 TableView 周围的矩形,这是指定阴影路径的正确坐标系。或者,您可以根本不设置阴影路径,阴影将绘制在正确的位置(尽管如果您可以可靠地执行此操作,则显式设置路径可能会带来性能优势)。

您还需要将图层的 shadowOpacity 而不是 opacity 设置为 1。并且您需要告诉 tableview_results 不要设置clipToBounds。所以像这样:

tableview_results.layer.shadowPath = UIBezierPath(rect: tableview_results.bounds).cgPath
tableview_results.layer.shadowColor = UIColor.black.cgColor
tableview_results.layer.shadowOpacity = 1
tableview_results.layer.shadowOffset = CGSize.zero
tableview_results.layer.shadowRadius = 10
tableview_results.clipsToBounds = NO;

对于最后一行,如果您觉得仅与图层对话代码更干净,则可以等效地使用tableview_results.layer.masksToBounds = NO

请注意,关闭剪切会产生副作用:现在您可能会看到 TableView 单元格超出了 TableView 本身的边界!所以可能有更好的方法来获得阴影效果。例如,您可以将 TableView 包装在一个紧密绑定(bind) TableView 的简单 super View 中,并为该 super View 提供阴影。只是一个想法。

关于ios - 如何在 UITableView 本身上设置 DropShadow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43560769/

相关文章:

Swift 4 字符串索引在处理大字符串时偏移太慢

iphone - 将位置存储为字符串,从字符串中获取位置以显示在 map 上。 iOS

ios - 努力理解为什么 "Capturing by reference ensures that runningTotal and amount do not disappear when the call to makeIncrementer ends' ?

ios - TViOS 第三方库 marmelroy/Zip

ios - tableView 中的无限 backgroundView

ios - UITableViewCell 内容在滚动时改变了它的位置

ios - 根据点击的按钮在tableView中显示不同的数据

ios - React-Native:当状态改变时图像不会重新渲染

ios - 根据服务器的响应动态创建表单

swift - Xcode:架构选择器中缺少自己的 Swift 包