将 UIView 作为子视图添加到 UIButton 并将其置于前面无法正常工作

Posted

技术标签:

【中文标题】将 UIView 作为子视图添加到 UIButton 并将其置于前面无法正常工作【英文标题】:Adding UIView as a subview to a UIButton and bring it to front is not working properly 【发布时间】:2020-03-22 10:31:38 【问题描述】:

我有一个 UIButton,背景颜色是白色的。

@IBOutlet weak var buttonNewPost: UIButton! 
    didSet 
        buttonNewPost.layer.borderColor = UIColor(red:0.88, green:0.88, blue:0.88, alpha:1.0).cgColor
        buttonNewPost.layer.cornerRadius = 5
        buttonNewPost.backgroundColor = .white
    

我想添加一个 UIView 来给这个圆形按钮添加阴影:

    let buttonShadow = UIView()
    buttonShadow.frame.size.width = buttonNewPost.layer.bounds.width
    buttonShadow.frame.size.height = buttonNewPost.layer.bounds.height
    buttonShadow.backgroundColor = .clear
    buttonShadow.dropShadowEdged = true
    buttonShadow.isUserInteractionEnabled = false
    buttonNewPost.addSubview(buttonShadow)
    buttonShadow.bringSubviewToFront(buttonNewPost)

结果是这样的:

为什么 UIButton 不是在前面,背景是白色的?当我将 UIButton 的背景颜色更改为蓝色时:

为什么会这样?我只想要一个带阴影的白色按钮

【问题讨论】:

这个怎么样:buttonNewPost.bringSubviewToFront(buttonShadow) 【参考方案1】:

你可以直接对 UIButton 应用阴影:-

@IBOutlet weak var Btn: UIButton! 
        didSet 
            Btn.layer.borderColor = UIColor(red:0.88, green:0.88, blue:0.88, alpha:1.0).cgColor
            Btn.layer.cornerRadius = 5
            Btn.backgroundColor = .white
        
    

将以下代码添加到 Viewdidload:-

Btn?.layer.borderColor = UIColor.black.cgColor
Btn?.layer.borderWidth = 1.0
Btn?.layer.cornerRadius = 20.0
Btn?.layer.shadowOpacity = 0.5
Btn?.layer.shadowColor = UIColor.red.cgColor
Btn?.layer.shadowRadius = 5.0
Btn?.layer.shadowOffset = CGSize(width: 0.0, height: 0.0)

After using this code you will get result like this

【讨论】:

以上是关于将 UIView 作为子视图添加到 UIButton 并将其置于前面无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UITableView 作为子视图添加到 xib 中的 UIView?

关于如何将 UIview 作为子视图添加到 UITableCell 的问题

将 UIView 作为子视图添加到 UIButton 并将其置于前面无法正常工作

UIView:将 UIViewController 的视图添加为子视图并将其删除

如何管理添加到 UIView 中的子视图?

作为 UIWindow 子视图添加的 UIView 不响应点击