swift - UIView 阴影显示不正确
问题描述
我之前遇到过这个问题,通常可以通过将代码放入viewWillLayoutSubviews()
. 这适用于我拥有的所有其他视图控制器,但我找不到解决方案。
我有一个UIView
,我正在为它添加一个阴影,如下所示:
func setUpUI() {
for tile in roundedTiles {
tile.layer.cornerRadius = t.frame.height/2
tile.layer.shadowColor = UIColor.black.cgColor
tile.layer.shadowRadius = 10.0
tile.layer.shadowOpacity = 0.15
tile.layer.addSpread(spread: -10)
tile.layer.borderColor = GlobalConstants.Colors.lightGray.cgColor
tile.layer.borderWidth = 1
}
}
然后我在这里调用它:
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
setUpUI()
}
然而,这就是它的样子:
这是它应该看起来的样子,取自另一个正确显示的视图控制器(我在那里编写的代码完全相同):
在查看了其他 StackOverflow 问题后,我尝试将其移至viewDidLayoutSubviews()
、viewDidLoad()
和添加tile.layoutIfNeeded()
。没有任何工作。真的很感激一些帮助!
解决方案
首先,我建议为您的图块子类化 UIView 并在 init 方法中添加阴影和圆角,而不是通过父视图控制器添加它。
获得带有阴影的圆角的技巧是将阴影添加到视图本身,然后为圆角添加一个子视图,您可以在不影响父视图的情况下对其进行 maskToBounds。
所以:
class roundedTile: UIView {
required init?(coder: NSCoder) {
super.init(coder: coder)
self.layer.cornerRadius = self.frame.height/2
// Add shadow to parent view
self.layer.shadowColor = UIColor.black.cgColor
self.layer.shadowOffset = CGSize(width: 5.0, height: 0.0)
self.layer.shadowOpacity = 0.15
self.layer.shadowRadius = 10.0
// Create subview for rounded corners
let subView = UIView()
subView.frame.size = self.frame.size
subView.layer.cornerRadius = frame.height/2
subView.layer.borderColor = UIColor.lightGray.cgColor
subView.layer.borderWidth = 1
subView.layer.masksToBounds = true
self.addSubview(subView)
}
}
品尝阴影偏移/半径/不透明度的季节。
推荐阅读
- php - Wordpress - 使用类依赖测试自定义 API 端点
- ios - CI 使用 errSecInternalComponent (Buildkite) 协同设计失败
- dataset - RARD II 问题(recomedation 系统的文章数据集)
- node.js - 使用 n:m 关联处理高内存使用情况
- java - 字符串到日期格式java
- java - 如何使用 JLabel 获取 JFrame?尝试时出错
- python - 如何与dict一起使用join
- reactjs - 我应该在哪里实施 Firebase 身份验证?
- arduino - 带有 SAM3X8E(Arduino Due)的 FreeRTOS 10 xTaskCreate 未运行
- calibre - 口径编辑的书内容未保存