TableView圆角和阴影

TableView rounded corners and shadow

我有一个包含三行的 table 视图。我正在尝试使 table 行具有圆角以及整个 table 视图周围的阴影效果。出于某种原因,我无法使 table 视图都具有圆角和阴影效果,但如果我注释掉负责其中一个功能的代码,我可以单独进行。这是我使用的代码:

//this is for shadow effect

tableView.backgroundColor = UIColor.clearColor()

tableView.layer.shadowColor = UIColor.darkGrayColor().CGColor   

tableView.layer.shadowOffset = CGSize(width: 2.0, height: 2.0

tableView.layer.shadowOpacity = 1.0

tableView.layer.shadowRadius = 2

// This is for rounded corners

tableView.layer.cornerRadius = 10

tableView.layer.masksToBounds = true

您可以将 table 视图添加到容器视图并向该容器视图添加阴影:

let containerView:UIView = UIView(frame:CGRect(x: 10, y: 100, width: 300, height: 400))
self.tableView = UITableView(frame: containerView.bounds), style: .Plain)
containerView.backgroundColor = UIColor.clearColor()
containerView.layer.shadowColor = UIColor.darkGrayColor().CGColor   
containerView.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
containerView.layer.shadowOpacity = 1.0
containerView.layer.shadowRadius = 2
// This is for rounded corners
self.tableView.layer.cornerRadius = 10
self.tableView.layer.masksToBounds = true
self.view.addSubview(containerView)
containerView.addSubview(self.tableView)

编辑

Swift 3.0:

let containerView:UIView = UIView(frame:CGRect(x: 10, y: 100, width: 300, height: 400))
self.tableView = UITableView(frame: containerView.bounds, style: .plain)
containerView.backgroundColor = UIColor.clear
containerView.layer.shadowColor = UIColor.darkGray.cgColor
containerView.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
containerView.layer.shadowOpacity = 1.0
containerView.layer.shadowRadius = 2
    
self.tableView.layer.cornerRadius = 10
self.tableView.layer.masksToBounds = true
self.view.addSubview(containerView)
containerView.addSubview(self.tableView)

感谢@beyowulf

我已经用 Swift 2.2 升级到

  • 设置边框,
  • 圆角
  • 将阴影投射到table视图

    //for table view border
    tableView.layer.borderColor = UIColor .grayColor().CGColor
    tableView.layer.borderWidth = 1.0
    
    //for shadow
    let containerView:UIView = UIView(frame:self.tableView.frame)
    containerView.backgroundColor = UIColor.clearColor()
    containerView.layer.shadowColor = UIColor.lightGrayColor().CGColor
    containerView.layer.shadowOffset = CGSizeMake(-10, 10); //Left-Bottom shadow
    //containerView.layer.shadowOffset = CGSizeMake(10, 10); //Right-Bottom shadow
    containerView.layer.shadowOpacity = 1.0
    containerView.layer.shadowRadius = 2
    
    //for rounded corners
    tableView.layer.cornerRadius = 10
    tableView.layer.masksToBounds = true
    self.view.addSubview(containerView)
    containerView.addSubview(tableView)
    

结果看起来像

RDC 的回答很好,但对我来说结果没有解决我的问题,下面是我的解决方法:

//for table view border
tableView.layer.borderColor = UIColor .grayColor().CGColor
tableView.layer.borderWidth = 1.0

//for shadow
let containerView:UIView = UIView(frame:self.tableView.frame)
//dont use clear color,fit blue color
containerView.backgroundColor = UIColor.blueColor()
//shadow view also need cornerRadius
containerView.layer.cornerRadius = 10
containerView.layer.shadowColor = UIColor.lightGrayColor().CGColor
containerView.layer.shadowOffset = CGSizeMake(-10, 10); //Left-Bottom shadow
//containerView.layer.shadowOffset = CGSizeMake(10, 10); //Right-Bottom shadow
containerView.layer.shadowOpacity = 1.0
containerView.layer.shadowRadius = 2

//for rounded corners
tableView.layer.cornerRadius = 10
tableView.layer.masksToBounds = true
self.view.addSubview(containerView)
self.view.addSubview(tableView)

我尝试了上述解决方案,但在我的应用程序表视图中 didSelectRowAt 不起作用。

将此扩展用于 UITabeleView 对于角落 对于阴影

//如果你想要阴影用于所有方面(shadowOffset = .zero)

extension UITableView {
    func addCorner(){
        self.layer.cornerRadius = 15
        self.clipsToBounds = true
    }

    func addShadow(){
        self.layer.shadowColor = UIColor.lightGray.cgColor
        self.layer.shadowRadius = 5
        self.layer.shadowOpacity = 0.5
        self.layer.shadowOffset = .zero
        self.layer.masksToBounds = false
    }
}

如何使用::

   self.tableView.addCorner()
   self.tableView.addShadow()