【问题标题】:TableView rounded corners and shadowTableView 圆角和阴影
【发布时间】:2016-02-20 23:09:44
【问题描述】:

我有一个三行的表格视图。我正在尝试使表格行具有圆角以及整个表格视图周围的阴影效果。出于某种原因,我不能让表格视图同时具有圆角和阴影效果,但如果我注释掉负责其中一项功能的代码,我可以单独执行它们。这是我正在使用的代码:

//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

【问题讨论】:

  • 因为我使用的是表格视图,所以效果不太好。
  • 应该可以了,你还在编辑视图层。
  • 我对如何使用我的 tableview 实例有点困惑。我可以为我的表格视图制作一个 IBOutlet 并以某种方式在您提供的链接的答案中使用它吗?
  • 你使用的是UITableViewController还是UITableView

标签: ios swift uitableview storyboard tableview


【解决方案1】:

您可以将您的表格视图添加到容器视图中,并将投影添加到该容器视图中:

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)

编辑

斯威夫特 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)

【讨论】:

  • containerView:UIView = UIView(frame:self.tableView.frame) 给我一个问题.. 似乎不知道它是什么。如果我将第一行更改为:“let containerView = UIView(frame:self.tableView.frame)”,它会强制关闭。
  • 请注意,此代码将使删除功能停止工作。
  • @JohnDoe 您将不得不更加具体。我刚刚运行了这段代码并且删除工作正常。请参阅我附在答案中的 gif。
  • 这很奇怪。昨天我可以滑动但不能点击删除按钮。但是现在刷卡在我的实际项目中根本不起作用。刚才我创建了一个新项目,滑动确实有效,但点击删除无济于事。我尝试将代码放入viewDidAppearviewWillAppearviewWillLayoutSubviews。删除代码使其工作,或将最后一行更改为 self.view.addSubview(tableView) 类似于下一个答案
  • @JohnDoe This 是我用来测试它的代码。 ¯_(ツ)_/¯
【解决方案2】:

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)

【讨论】:

  • 感谢您的努力 :)
  • 当上述答案无效时,这对我有用。谢谢
【解决方案3】:

我尝试了上述解决方案,但在我的应用程序 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()

【讨论】:

  • 这样,tableview 单元格在滑动时会越过导航栏。如何解决?
【解决方案4】:

感谢@beyowulf

我已使用 Swift 2.2 为我升级到

  • 设置边框
  • 圆角
  • 阴影到表格视图

    //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)
    

结果看起来像

【讨论】:

  • 代码可以运行,但是 y 位置很奇怪,让我们尝试将 clearColor() 行修改为 containerView.backgroundColor = UIColor.blueColor();添加 containerView.layer.cornerRadius = 10;将 containerView.addSubview(tableView) 修改为 [code]self.view.addSubview(tableView);[/code]
猜你喜欢
  • 2014-09-15
  • 2016-10-05
  • 2011-09-10
  • 1970-01-01
  • 2020-06-27
  • 2011-06-12
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多