【问题标题】:How to set shadow for custom view of UITableViewCell in swift 4.2?如何在 swift 4.2 中为 UITableViewCell 的自定义视图设置阴影?
【发布时间】:2018-11-26 12:34:51
【问题描述】:
我已经尝试过了,但对我不起作用:
cell.totalView?.layer.shadowColor = UIColor.yellow.cgColor
cell.totalView?.layer.shadowOffset = CGSize.zero
cell.totalView?.layer.shadowOpacity = 1.0
cell.totalView?.layer.shadowRadius = 10
cell.totalView?.layer.shouldRasterize = true
【问题讨论】:
标签:
ios
swift
layer
shadow
【解决方案1】:
尝试通过自定义单元格的awakeFromNib 方法为您的自定义视图添加阴影。
例如
在您的 customTableViewCell 类中添加以下方法
func dropShadow(view: UIView, shadowOpacity: Float = 0.2, shadowColor: CGColor = UIColor.gray.cgColor, shadowRadius: CGFloat = 5){
view.layer.shadowColor = shadowColor
view.layer.shadowOpacity = shadowOpacity
view.layer.shadowOffset = CGSize.zero
view.layer.shadowRadius = shadowRadius
}
并从awakeFromNib 方法调用它
override func awakeFromNib() {
super.awakeFromNib()
dropShadow(view: yourCustomView, shadowOpacity: 0.2, shadowColor: UIColor.yellow.cgColor, shadowRadius: 5)
}
【解决方案2】:
在 CustomViewCell 中创建 insideView 并在 awakeFromNib() 中加载此函数
func ui() {
insideView.layer.shadowColor = UIColor.black.cgColor
insideView.layer.shadowOpacity = 0.2
insideView.layer.shadowOffset = CGSize.zero
insideView.layer.shadowRadius = 5
insideView.layer.cornerRadius = 5
}
【解决方案3】:
将 maskToBounds 设置为 true
cell.totalView?.layer.masksToBounds = true
【解决方案4】:
只需在表格单元格中添加一个 UIVIew,四周边距为 8。
创建一个名为CardView.swift的文件
import UIKit
@IBDesignable
class CardView: UIView {
@IBInspectable var cornerRadius: CGFloat = 2
@IBInspectable var shadowOffsetWidth: Int = 0
@IBInspectable var shadowOffsetHeight: Int = 1
@IBInspectable var shadowColor: UIColor? = UIColor.black
@IBInspectable var shadowOpacity: Float = 0.1
override func layoutSubviews() {
layer.cornerRadius = cornerRadius
let shadowPath = UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius)
layer.masksToBounds = false
layer.shadowColor = shadowColor?.cgColor
layer.shadowOffset = CGSize(width: shadowOffsetWidth, height: shadowOffsetHeight);
layer.shadowOpacity = shadowOpacity
layer.shadowPath = shadowPath.cgPath
}
}
只需在情节提要中添加自定义类