У меня проблема с навигацией, когда мои кнопки отображаются неправильно. Я хочу 2 ряда по 3 кнопки в каждом. Каждая кнопка имеет изображение и метку. Метка должна быть в центре и под изображением. Но это хитрая вещь, которую я не могу заставить работать правильно, потому что каждый раз, когда я запускаю эмулятор, первая кнопка выглядит нормально, а все остальные отображаются правильно в термах изображения, но не на ярлыке. Я пытался возиться с размером кнопок, но, кажется, замечание работает.
Я также пытался использовать код из этого вопроса в stackoverflow, но я не работал правильно. потому что изображение не отображалось вообще, но размер был правильным. Кроме того, метка была показана только на первой кнопке.
Я использую 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
кнопки. Я также дважды проверил, был ли класс назначен для всех соответствующих кнопок и чтобы каждая кнопка имела метку. Кроме того, я также проверил, что через конструктор интерфейса не было установлено никаких вставок.
До сих пор мне не удавалось найти решение, отсюда и мой вопрос. Я ценю вашу помощь. Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь обращаться. Я буду рад предоставить это.
Спасибо