我正在尝试在以编程方式添加的 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/