Значок отображается за UIButton - PullRequest
0 голосов
/ 12 ноября 2018

Я создал собственный класс, который добавляет значок к кнопке UIB. Сам значок является UIImageView. Кнопка может иметь различный пользовательский интерфейс для каждого состояния; когда кнопка отключена, она имеет четкий фон, показывает рамку и заголовок, как показано на рисунке ниже.

enter image description here

Как видите, значок отображается за границей, но я хочу, чтобы значок находился поверх него. Я попытался отрегулировать 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 ]

0 голосов
/ 12 ноября 2018

Попробуйте поместить изображение значка после (под) кнопки в вашем XML.

0 голосов
/ 12 ноября 2018

Это ожидаемое поведение. Граница должна всегда быть сверху всех подпредставлений. Вы можете получить желаемый эффект, вместо этого добавив 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)
...