当我不希望UIButton透明时,它是透明的

时间:2018-09-19 11:39:47

标签: ios uibutton uicollectionviewcell

我有一个按钮,该按钮放置在自定义UICollectionViewCell的右上角。出于某种原因,它看起来是半透明的,因此当我不希望出现这种情况时,可以通过按钮显示单元格的边框。

在我的CustomCollectionviewCell中:

    lazy var favoriteButton: UIButton = {
        let button = UIButton(type: .system)
        button.setImage(#imageLiteral(resourceName: "star_white").withRenderingMode(.alwaysOriginal), for: .normal)
        button.addTarget(self, action: #selector(favoriteTapped), for: .touchUpInside)
        button.isEnabled = true
        return button
    }()

    override init(frame: CGRect) {
        super.init(frame: frame)

        backgroundColor = UIColor.mainWhite()
        layer.borderWidth = 1.0
        layer.borderColor = UIColor.lightGray.cgColor

        setupCellLayout()
    }


    fileprivate func setupCellLayout() {
        addSubview(favoriteButton)
        favoriteButton.translatesAutoresizingMaskIntoConstraints = false
        favoriteButton.heightAnchor.constraint(equalToConstant: 32).isActive = true
        favoriteButton.widthAnchor.constraint(equalToConstant: 32).isActive = true
        favoriteButton.centerXAnchor.constraint(equalTo: rightAnchor, constant: -12).isActive = true
        favoriteButton.centerYAnchor.constraint(equalTo: topAnchor).isActive = true
        bringSubview(toFront: favoriteButton)
    }

结果如下:

enter image description here enter image description here

这些图像都不是半透明的。它们具有扎实的背景,因此我对为什么它们在应用程序中显示为半透明感到困惑。我原本以为可能是将它们放置在单元格的后面,所以我在setupCellLayout()中将该调用添加到bringSubview(toFront: favoriteButton)上,但这并不能解决问题。

我还认为使用.withRenderingMode(.alwaysOriginal)应该可以解决问题,但是没有运气。

关于为什么会发生这种情况的任何想法?

1 个答案:

答案 0 :(得分:3)

UIView的{​​{1}}是视图的主要subviews内的图层,并且显然存在no way to bring them above the layer,因为那就像将它们带出视图。 / p>

您可以添加带有边框的背景子视图,并在其前面添加所有其他视图。

或者,您可以插入背景子图层,并将边框应用于此图层。但是,请注意不要CALayer,因为它会被添加到子视图的上方,而是要插入索引0以便将其插入到后面

addSublayer

要注意的另一个重要点是确保插入层代码不会被重复调用。