ios - 具有动态内容的 tableview 上的 Swift 阴影
问题描述
我在表格视图上有阴影的动态内容有问题
我有一个扩展角半径和阴影
extension UIView {
func roundCorners(_ corners: UIRectCorner, radius: CGFloat) {
let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius))
let mask = CAShapeLayer()
mask.path = path.cgPath
self.layer.mask = mask
let shadowLayer = CAShapeLayer()
shadowLayer.path = path.cgPath
shadowLayer.frame = self.frame
shadowLayer.shadowOpacity = 0.4
shadowLayer.shadowRadius = 2
shadowLayer.shadowColor = UIColor.black.cgColor
shadowLayer.shadowOpacity = 0.13
shadowLayer.shadowRadius = 6
shadowLayer.shadowOffset = CGSize(width: 0, height: 3)
self.superview!.layer.insertSublayer(shadowLayer, below: self.layer)
}
}
而这个 id MyCustomTableViewCell
override func awakeFromNib() {
super.awakeFromNib()
bg_view.roundCorners([.topLeft, .topRight, .bottomRight, .bottomLeft], radius: 9)
}
这是我的结果(文本是“这是我在表格上的数据”)
我也用
activity_table.rowHeight = UITableView.automaticDimension
activity_table.estimatedRowHeight = 100
并将行设置为0
解决方案
我又玩了一些。你让这种方式比它需要的更复杂。我能够在不需要子层的情况下解决这个问题。
class Cell: UITableViewCell {
@IBOutlet weak var label: UILabel!
@IBOutlet weak var containerView: UIView!
override func awakeFromNib() {
super.awakeFromNib()
containerView.layer.cornerRadius = 9
containerView.layer.shadowColor = UIColor.black.cgColor
containerView.layer.shadowOpacity = 0.13
containerView.layer.shadowRadius = 6
containerView.layer.shadowOffset = CGSize(width: 0, height: 3)
}
}
containerView 只是一个包含标签的子视图。现在,使用 containerView,您可以调整阴影和圆角。
您可以在此处查看完整的解决方案。
唯一需要确定的是containerView的背景颜色不清晰。如果是这样,您将看到一些奇怪的副作用,其中阴影传播到文本标签。
推荐阅读
- flutter - 我在绘图仪中使用相机插件。我想在每一页上都有一个相机。我认为我们需要解决概率变量问题
- python - 来自 Django 中 Queryset 的特定查询
- apache - htaccess 从文件夹重定向到外部 URL
- javascript - 如何修复我的 heroku 部署应用程序的内容安全策略?
- javascript - 为什么 clearinterval() 不会停止 JS 中的 setInterval()?
- html - 浏览器启动时是否有让 TestCafe Studio 选择客户端证书?
- spring-boot - 在 kotlin 数据类中,@field:NotBlank 不起作用
- python - django.db.utils.ProgrammingError:set_session 不能在事务中使用
- javascript - bootstrap 5 中的更改以使控件假定最大大小
- c# - 用于更新订单数量的按钮未按预期工作