向使用 SnapKit 定位的 UIView 添加阴影
Posted
技术标签:
【中文标题】向使用 SnapKit 定位的 UIView 添加阴影【英文标题】:Adding shadow to UIView that is positioned using SnapKit 【发布时间】:2017-04-19 01:49:14 【问题描述】:我使用 SnapKit 定位了一个 UIView,需要找到一种添加阴影的方法。因为我相对于其他 UIView 定位了视图,所以我没有视图的高度、宽度或起始坐标。如何向使用 SnapKit 自动布局定位的 UIView 添加阴影。定位 UIView 的代码是这样的:
tableViewBackground.snp.makeConstraints (make) -> Void in
make.width.lessThanOrEqualToSuperview()
make.height.lessThanOrEqualToSuperview()
make.right.equalToSuperview().offset(-20)
make.left.equalToSuperview().offset(20)
make.bottom.equalToSuperview().offset(-20)
make.top.equalTo(poiLabel.snp.bottom).offset(20)
【问题讨论】:
为什么不使用layer
阴影设置,就像任何其他视图阴影一样?
@matt 我尝试过使用tableViewBackground.layer.shadowPath = UIBezierPath(rect: tableViewBackground.bounds).cgPath
。问题是 tableViewBackground.bounds
等于 [0,0,0,0] 因为视图是使用 snapkit 定位的
这只是表明你做得太早了。等到视图已经被定位之后,你就有了实际的边界。
@matt 感谢您的建议。目前,在视图控制器方法 onViewDidLoad 中设置 Snap Kit 约束后立即添加阴影层。我应该在哪里添加阴影层?
viewDidLayoutSubviews
可能是最早的可靠时刻。但要小心,因为它可能会被多次调用。
【参考方案1】:
将阴影层的创建从viewDidLoad
移动到viewDidLayoutSubviews
【讨论】:
以上是关于向使用 SnapKit 定位的 UIView 添加阴影的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中使用 SnapKit 使 UIView 具有相等的宽度和高度?
我想使用 SnapKit 将顶部 UIView 放置在 UITableView 之上
Snapkit 布局问题 - UITextView 超越 UIView
如何获取已通过 snapkit 设置的 UIView 的框架