【问题标题】:Shadow is not visible on some UI elements阴影在某些 UI 元素上不可见
【发布时间】:2021-01-04 02:31:52
【问题描述】:

我有一个辅助方法可以帮助我在所有 UI 元素上添加阴影,它对大多数元素都非常有效,但在其中一些元素上却不行。
例如,在下面这个stackView上,我运行我的应用程序时没有阴影:

    var container = UIStackView()
    let stackView = UIStackView(arrangedSubviews: [button1, button2, button3])
            stackView.axis = .vertical
            stackView.distribution  = .equalSpacing
            stackView.alignment = .fill
            
            container = stackView
            self.view.addSubview(container)
            
            container.snp.makeConstraints { make in
                make.top.equalTo(view).offset(25)
                make.right.equalTo(view).offset(-25)
                make.width.equalTo(view.frame.width * 0.185)
                make.height.equalTo(view.frame.width * 0.65)
            }
            container.layer.addShadow()

我也尝试为我的按钮(按钮 1、按钮 2、按钮 3)调用此 addShadow(),但没有成功。
我在addShadow()的参数中尝试了不同的值,但是......

另一个例子是它 WORKS,在我的 imageView 上:

let avatarImageView = UIImageView()
self.addSubview(avatarImageView)
        avatarImageView.contentMode = .scaleAspectFit
        avatarImageView.image = UIImage(named: imageName)
        avatarImageView.snp.makeConstraints { (make) in
            make.height.equalToSuperview()
            make.width.equalToSuperview().multipliedBy(0.5)
            make.left.equalToSuperview()
        }
        avatarImageView.layer.addShadow(opacity: 0.3, offsetWidth: 13, offsetHeight: 8)

这是一个影子方法(在 CALayer 的扩展中):
func addShadow(scale: Bool = true, opacity: Float = 0.4, offsetWidth: Int = 5, offsetHeight: Int = 5, radius: CGFloat = 5) {
        masksToBounds = false
        shadowColor = UIColor.black.cgColor
        shadowOpacity = opacity
        shadowOffset = CGSize(width: offsetWidth, height: offsetHeight)
        shadowRadius = radius
        shouldRasterize = true
        rasterizationScale = scale ? UIScreen.main.scale : 1
    }

【问题讨论】:

    标签: ios swift uikit calayer shadow


    【解决方案1】:

    请参阅 Apple 的 UIStackView documentation。

    管理堆栈视图的外观:
    UIStackView 是 UIView 的非渲染子类。

    UIStackView 只管理其排列视图的位置和大小,不会显示背景或阴影。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      相关资源
      最近更新 更多