【问题标题】:UIView shadow issue on real device - iOS真实设备上的 UIView 阴影问题 - iOS
【发布时间】:2020-07-09 23:51:15
【问题描述】:

我有一个 tableview 单元格,里面有视图,我想给它添加阴影。

为此,我添加了以下代码:

self.PrimaView.layer.shadowPath = UIBezierPath(rect: self.PrimaView.bounds).cgPath
self.PrimaView.layer.shadowRadius = 3
self.PrimaView.layer.shadowOffset = .zero
self.PrimaView.layer.shadowOpacity = 3

这是表格视图单元格结构:

我的问题是这样的:

当我在模拟器上执行代码时,我得到了这个(这是我想要得到的):

但是当我在真实设备上执行相同的代码时,我得到了这个:

为什么和上一张不一样?

【问题讨论】:

  • 因为您的视图已调整大小。您必须从 UIView.layoutSubviews 更新 shadowPath(理想情况下仅在大小实际发生变化时)。
  • 谢谢!!一个问题:为什么在模拟器上我没有这个问题?
  • 可能它的屏幕尺寸与您的设备不同。

标签: ios swift uitableview shadow


【解决方案1】:

@Sulthan 是对的,或者如果你没有相同的设备,你可能也有安全区域问题。 然后您可以将此代码用于阴影

import UIKit

@IBDesignable
class CardViewMaterial: UIView {

//    @IBInspectable var cornerRadius: CGFloat = 2

    @IBInspectable var shadowOffsetWidth: Int = 0
    @IBInspectable var shadowOffsetHeight: Int = 3
    @IBInspectable var shadowColor: UIColor? = UIColor.black
    @IBInspectable var shadowOpacity: Float = 0.5

    override 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
    }

}

【讨论】:

  • 您必须致电super.layoutSubviews。在更改 shadowPath 之前,您应该检查边界是否已更改,否则会影响性能。
猜你喜欢
  • 1970-01-01
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-04
相关资源
最近更新 更多