UIView阴影显示不正确

时间:2019-10-02 13:09:41

标签: 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()
    }

但是,它看起来像这样:

enter image description here

这是应该从正确显示的另一个视图控制器中提取的样子(我在那儿写的代码完全一样):

enter image description here

在查看了其他StackOverflow问题之后,我尝试将其移至viewDidLayoutSubviews()viewDidLoad(),并添加tile.layoutIfNeeded()。什么都没用。非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,我建议为您的图块子类化UIView,并在init方法中添加阴影和圆角,而不是通过父视图控制器添加阴影和圆角。

获得带有阴影的圆角的技巧是将阴影添加到视图本身,然后为圆角添加子视图,您可以在不影响父级的情况下将其蒙版到边界。

所以:

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

季节,以品尝阴影偏移/半径/不透明度。