向使用 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 的框架

如何通过 swift 3 的 snapkit 向任何 UI 添加动画?

如何获取 snapkit 为 UIView 声明的高度约束?