Значок отображается за UIButton
Я создал собственный класс, который добавляет значок в UIButton. Сам значок является UIImageView. Кнопка может иметь различный пользовательский интерфейс для каждого состояния; когда кнопка отключена, она имеет четкий фон, показывает рамку и заголовок, как показано на рисунке ниже.
Как вы можете видеть, значок отображается за границей, но я хочу, чтобы значок был поверх него. Я попытался отрегулировать zPosition слоя значка, установив его, например, на 9999. Я также попытался вывести значок на передний план, используя метод yieldSubviewToFront. Оба способа не сработали. Мой код для добавления значка на кнопку таков:
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 ответа
Это ожидаемое поведение. Граница должна всегда быть сверху всех подпредставлений. Вы можете получить желаемый эффект, добавив вместо 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)
Попробуйте поместить изображение значка после (под) кнопки в вашем XML.