带有圆角和阴影的 Swift uiview 不起作用
Posted
技术标签:
【中文标题】带有圆角和阴影的 Swift uiview 不起作用【英文标题】:Swift uiview with rounded corners and drop shadow does not work 【发布时间】:2016-10-26 15:40:33 【问题描述】:我正在尝试向我的 UIView 添加圆角和阴影:
myView.layer.cornerRadius = 2
myView.layer.masksToBounds = false
myView.layer.shadowColor = UIColor.black.cgColor
myView.layer.shadowOffset = CGSize(width: 0, height: 1)
myView.layer.shadowOpacity = 0.4
myView.layer.shadowPath = UIBezierPath(roundedRect: myView.bounds, cornerRadius: 2).cgPath
但这会使阴影在右侧和底部下降很远,这是错误的。
我将这段代码放在 ViewDidLoad() 中,因为我的 UIView 已经有另一个子类,所以我想在 VC 中而不是在子类中添加阴影
但如果我将代码放在子类中,它将起作用:
import UIKit
public class ShadowView: UIView
open var cornerRadius: CGFloat = 2
open var shadowOffsetWidth: Int = 0
open var shadowOffsetHeight: Int = 2
open var shadowColor: UIColor? = UIColor.black
open var shadowOpacity: Float = 0.4
override open 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
但是,如何将代码放在我的主 VC 中而不是子类中?
【问题讨论】:
我会尝试将您的 VC 层代码放入 viewDidLayoutSubviews 而不是 viewDidLoad。到那时,您的视图将正确调整大小。 (顺便说一句,我不禁注意到您的 ShadowView 代码没有调用 super.layoutSubviews) @JoshuaKaden 代码来自这个仓库:github.com/NathanWalker/MaterialCard,为什么我必须调用 super.layoutSubviews? 在覆盖时调用 super 是一种很好的 OOP 实践。这是 SOLID 中的 L:en.wikipedia.org/wiki/SOLID_(object-oriented_design) @JoshuaKaden viewDidLayoutSubviews 修复了它。发表答案,我会接受:) 【参考方案1】:我会尝试将您的 VC 层代码放入 viewDidLayoutSubviews 而不是 viewDidLoad。到那时,您的视图将正确调整大小。
【讨论】:
以上是关于带有圆角和阴影的 Swift uiview 不起作用的主要内容,如果未能解决你的问题,请参考以下文章