徽章显示在UIButton后面

时间:2018-11-12 15:36:18

标签: ios swift button badge zposition

我创建了一个自定义类,该类将徽章添加到UIButton。徽章本身是UIImageView。对于每种状态,该按钮可以具有不同的UI;例如,禁用该按钮时,它具有清晰的背景,并显示边框和标题,如下图所示。

enter image description here

如您所见,徽章显示在边框的后面,但是我想将徽章放在它的顶部。我试图通过将徽章层的zPosition设置为例如9999。我还尝试通过使用BringSubviewToFront方法将徽标放到最前面。两种方法均无效。 我将徽章添加到按钮的代码是这样的:

private func addBadgeImageToButton() {
    // badgeImage is a string containing the imageName
    guard badgeImage != nil else {
        return
    }

    badgeImageView = UIImageView(image: UIImage(named: badgeImage!))

    // This line merely adjusts the position of the UIImageView
    badgeImageView!.frame = adjustedRectangleForBadge(initialSize: badgeImageView!.frame.size)

    badgeImageView!.layer.zPosition = 9999
    addSubview(badgeImageView!)

    // This line does not seem to work
    //self.bringSubviewToFront(badgeImageView!)

    // Adding these two lines won't do the trick either
    self.setNeedsLayout()
    self.layoutIfNeeded()
}

有人可以帮助我解决这个小问题吗?任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

这是预期的行为。边框应始终位于所有子视图的顶部。您可以通过在UIView上添加带有边框的UIButton,然后在其后添加图标来获得所需的效果。

let borderView = UIView(frame: CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.height)
borderView.layer.cornerRadius = self.layer.cornerRadius
borderView.layer.borderColor = self.layer.borderColor

// Remove the border color from the button its self
self.layer.borderColor = UIColor.clear.cgColor

// Add the border view to fake the border being there
addSubview(borderView)

// Then add the imageView on top of that border view
addSubview(badgeImageView)

答案 1 :(得分:0)

尝试将您的徽章图像放在xml中的按钮之后(下方)。