Как выровнять текст в UIButton ниже UIImage, потому что он не отображается правильно - PullRequest
1 голос
/ 24 октября 2019

У меня проблема с навигацией, когда мои кнопки отображаются неправильно. Я хочу 2 ряда по 3 кнопки в каждом. Каждая кнопка имеет изображение и метку. Метка должна быть в центре и под изображением. Но это хитрая вещь, которую я не могу заставить работать правильно, потому что каждый раз, когда я запускаю эмулятор, первая кнопка выглядит нормально, а все остальные отображаются правильно в термах изображения, но не на ярлыке. Я пытался возиться с размером кнопок, но, кажется, замечание работает.

Я также пытался использовать код из этого вопроса в stackoverflow, но я не работал правильно. потому что изображение не отображалось вообще, но размер был правильным. Кроме того, метка была показана только на первой кнопке.

screenshot of navigation

Я использую IBDesignable для расширения класса UIButton, который я назначаю для Button s

import UIKit

@IBDesignable
class VerticalButton: UIButton {

    @IBInspectable public var padding: CGFloat = 20.0 {
        didSet {
            setNeedsLayout()
        }
    }

    override var intrinsicContentSize: CGSize {
        let maxSize = CGSize(width: CGFloat.greatestFiniteMagnitude, height: CGFloat.greatestFiniteMagnitude)

        if let titleSize = titleLabel?.sizeThatFits(maxSize), let imageSize = imageView?.sizeThatFits(maxSize) {
            let width = ceil(max(imageSize.width, titleSize.width))
            let height = ceil(imageSize.height + titleSize.height + padding)

            return CGSize(width: width, height: height)
        }

        return super.intrinsicContentSize
    }

    override func layoutSubviews() {
        if let image = imageView?.image, let title = titleLabel?.attributedText {
            let imageSize = image.size
            let titleSize = title.size()

            titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -imageSize.width, bottom: -(imageSize.height + padding), right: 0.0)
            imageEdgeInsets = UIEdgeInsets(top: -(titleSize.height + padding), left: 0.0, bottom: 0.0, right: -titleSize.width)
        }

        super.layoutSubviews()
    }

}

Полагаю, я допустил ошибку при расчете в intrinsicContentSize кнопки. Я также дважды проверил, был ли класс назначен для всех соответствующих кнопок и чтобы каждая кнопка имела метку. Кроме того, я также проверил, что через конструктор интерфейса не было установлено никаких вставок.

До сих пор мне не удавалось найти решение, отсюда и мой вопрос. Я ценю вашу помощь. Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь обращаться. Я буду рад предоставить это.

Спасибо

1 Ответ

0 голосов
/ 25 октября 2019

Благодаря помощи @DonMag я обнаружил, что проблема не в коде, а в размере изображений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...