UIButton прозрачен, когда я не хочу, чтобы это было - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть кнопка, которую я помещаю в верхний угол пользовательского 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 hereenter image description here

Ни одно из этих изображений не является полупрозрачным.У них сплошной фон, поэтому я не понимаю, почему они отображаются в приложении как полупрозрачные.Первоначально я думал, что, возможно, они были размещены за ячейкой, поэтому я добавил этот вызов к bringSubview(toFront: favoriteButton) в setupCellLayout (), но это не исправило это.

Я также подумал, что использование .withRenderingMode(.alwaysOriginal) должно было бы сделатьтрюк, но не повезло.

Есть идеи, почему это может происходить?

1 Ответ

0 голосов
/ 21 сентября 2018

UIView * subviews являются слоями в пределах основного CALayer вида, и, очевидно, нет никакого способа поднять их над слоем , потому что это все равно что вывести их изview.

Вы можете добавить подпрограмму background с рамкой и добавить все остальные виды перед ней.

Кроме того, вы можете вставить фоновый подслой и применить к нему слой.Однако, пожалуйста, будьте осторожны, чтобы не addSublayer, так как он будет добавлен над подпредставлениями, но чтобы вставить его с индексом 0, чтобы он находился сзади

    let backgroundLayer  = CALayer()
    backgroundLayer.frame  = layer.bounds
    backgroundLayer.borderColor = UIColor.lightGray.cgColor
    backgroundLayer.borderWidth = 1.0
    layer.insertSublayer(backgroundLayer, at: 0)

Еще один важный момент, на который следует обратить внимание:убедитесь, что код слоя вставки не вызывается повторно.

...