如何仅在UITableView部分的底部添加阴影?

时间:2016-10-13 16:57:07

标签: ios iphone swift uitableview

我有一个分段UITableView,其标题高度为10,backgroundColorclearColor,只是为了显示更加分开的部分。现在我需要在每个部分的底部添加一个阴影。我尝试在viewForHeaderInSection方法中添加阴影,但结果非常糟糕。实现这一目标的任何提示?

func tableView(tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let shadowView = UIView()

    shadowView.layer.shadowColor = UIColor(red: 0, green: 0, blue: 0, alpha: 0.5).CGColor
    shadowView.layer.shadowOffset = CGSizeMake(0.0, 2.0)
    shadowView.layer.shadowOpacity = 1.0
    shadowView.layer.shadowRadius = 0.0
    shadowView.layer.masksToBounds = false

    return shadowView
}

func tableView(tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
    return 2
}

1 个答案:

答案 0 :(得分:9)

我做了这两个例子 Swift 3 。第一个是经典阴影,我使用了 CAGradientLayer 。第二个是影子弧,我使用 UIBezierPath CAShapeLayer CAGradientLayer

经典影子:

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
    let shadowView = UIView()




    let gradient = CAGradientLayer()
    gradient.frame.size = CGSize(width: myTab.bounds.width, height: 15)
    let stopColor = UIColor.gray.cgColor

    let startColor = UIColor.white.cgColor


    gradient.colors = [stopColor,startColor]


    gradient.locations = [0.0,0.8]

    shadowView.layer.addSublayer(gradient)


    return shadowView
}

结果如下:

enter image description here

暗影弧:

func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
let shadowView = UIView()

 let path = UIBezierPath()
        path.move(to: CGPoint.zero)
        path.addLine(to: (CGPoint(x: (myTab.bounds.maxX), y: 0.0)))
        path.addLine(to: (CGPoint(x: (myTab.bounds.maxX), y: 15)))
        path.addCurve(to: (CGPoint(x: 0.0, y: 15)), controlPoint1: (CGPoint(x: (myTab.bounds.midX), y: -10)), controlPoint2: (CGPoint(x: 0.0, y: 15)))
        path.addLine(to: CGPoint.zero)



        let shape = CAShapeLayer()
        shape.path = path.cgPath

        let gradient = CAGradientLayer()

        gradient.frame.size = CGSize(width: myTab.bounds.width, height: 15)
        let stopColor = UIColor.gray.cgColor

        let startColor = UIColor.white.cgColor


        gradient.colors = [stopColor,startColor]


        gradient.locations = [0.0,0.9]

        gradient.mask = shape

        shadowView.backgroundColor = UIColor.white
        shadowView.layer.addSublayer(gradient)




        return shadowView


}

结果如下:

enter image description here