53 lines
1.9 KiB
Swift
53 lines
1.9 KiB
Swift
// Copyright © 2020 Metabolist. All rights reserved.
|
|
|
|
import Mastodon
|
|
import UIKit
|
|
|
|
final class PollOptionButton: UIButton {
|
|
init(title: String, emojis: [Emoji], multipleSelection: Bool) {
|
|
super.init(frame: .zero)
|
|
|
|
titleLabel?.font = .preferredFont(forTextStyle: .callout)
|
|
titleLabel?.adjustsFontForContentSizeCategory = true
|
|
titleLabel?.numberOfLines = 0
|
|
titleLabel?.lineBreakMode = .byWordWrapping
|
|
contentHorizontalAlignment = .leading
|
|
titleEdgeInsets = Self.titleEdgeInsets
|
|
|
|
let attributedTitle = NSMutableAttributedString(string: title)
|
|
|
|
attributedTitle.insert(emojis: emojis, view: titleLabel!)
|
|
attributedTitle.resizeAttachments(toLineHeight: titleLabel!.font.lineHeight)
|
|
setAttributedTitle(attributedTitle, for: .normal)
|
|
setImage(
|
|
UIImage(
|
|
systemName: multipleSelection ? "square" : "circle",
|
|
withConfiguration: UIImage.SymbolConfiguration(scale: .medium)),
|
|
for: .normal)
|
|
setImage(
|
|
UIImage(
|
|
systemName: multipleSelection ? "checkmark.square" : "checkmark.circle",
|
|
withConfiguration: UIImage.SymbolConfiguration(scale: .medium)),
|
|
for: .selected)
|
|
|
|
setContentCompressionResistancePriority(.required, for: .vertical)
|
|
|
|
heightAnchor.constraint(equalTo: titleLabel!.heightAnchor).isActive = true
|
|
}
|
|
|
|
@available(*, unavailable)
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
}
|
|
|
|
extension PollOptionButton {
|
|
static func estimatedHeight(width: CGFloat, title: String) -> CGFloat {
|
|
title.height(width: width, font: .preferredFont(forTextStyle: .callout))
|
|
}
|
|
}
|
|
|
|
private extension PollOptionButton {
|
|
static let titleEdgeInsets = UIEdgeInsets(top: 0, left: .defaultSpacing, bottom: 0, right: .compactSpacing)
|
|
}
|