2017-04-22 111 views
1

我试图在正在以编程方式添加的UITableView上设置dropshadow。如何在UITableView本身上设置DropShadow

框架高度被设置为屏幕的某个百分比。所以我想在tableview本身设置一个阴影。

我试着做以下几点:

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

回答

1

阴影路径应设置为tableview_results.bounds而不是frame。边界是表格视图本身坐标系中表格视图周围的矩形,这是指定阴影路径的正确坐标系。或者,您可以根本不设置阴影路径,并且阴影将绘制在正确的位置(尽管如果可以可靠地做到这一点,则可能会明确设置路径的性能优势)。

您还需要将图层的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

请注意,存在关闭剪裁的副作用:现在,您可能会看到表视图单元格超出了表视图本身的范围!所以可能有更好的方法来获得阴影效果。例如,你可以将表视图封装在一个简单的超级视图中,该视图将紧挨着桌面视图,并给该超视图添加阴影。只是一个想法。

+0

最后将tableview添加到视图中,因为'clipsToBounds'导致了一些奇怪的行为,就像你预测的那样。你是否也可能知道如何将阴影应用于“UIView”的底部? – NoSixties

相关问题