70 lines
2.4 KiB
Swift
70 lines
2.4 KiB
Swift
|
// Copyright © 2020 Metabolist. All rights reserved.
|
||
|
|
||
|
import UIKit
|
||
|
|
||
|
class StatusView: UIView {
|
||
|
private var statusConfiguration: StatusContentConfiguration
|
||
|
|
||
|
private let content = TouchFallthroughTextView()
|
||
|
|
||
|
init(configuration: StatusContentConfiguration) {
|
||
|
self.statusConfiguration = configuration
|
||
|
|
||
|
super.init(frame: .zero)
|
||
|
|
||
|
setup()
|
||
|
applyStatusConfiguration()
|
||
|
}
|
||
|
|
||
|
@available(*, unavailable)
|
||
|
required init?(coder: NSCoder) {
|
||
|
fatalError("init(coder:) has not been implemented")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
extension StatusView: UIContentView {
|
||
|
var configuration: UIContentConfiguration {
|
||
|
get { statusConfiguration }
|
||
|
set {
|
||
|
guard let statusConfiguration = newValue as? StatusContentConfiguration else { return }
|
||
|
|
||
|
self.statusConfiguration = statusConfiguration
|
||
|
|
||
|
applyStatusConfiguration()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private extension StatusView {
|
||
|
func setup() {
|
||
|
addSubview(content)
|
||
|
content.translatesAutoresizingMaskIntoConstraints = false
|
||
|
content.isScrollEnabled = false
|
||
|
content.isEditable = false
|
||
|
content.backgroundColor = .clear
|
||
|
NSLayoutConstraint.activate([
|
||
|
content.leadingAnchor.constraint(equalTo: readableContentGuide.leadingAnchor),
|
||
|
content.trailingAnchor.constraint(equalTo: readableContentGuide.trailingAnchor),
|
||
|
content.topAnchor.constraint(equalTo: readableContentGuide.topAnchor),
|
||
|
content.bottomAnchor.constraint(equalTo: readableContentGuide.bottomAnchor)
|
||
|
])
|
||
|
}
|
||
|
|
||
|
func applyStatusConfiguration() {
|
||
|
let viewModel = statusConfiguration.viewModel
|
||
|
let mutableContent = NSMutableAttributedString(attributedString: viewModel.content)
|
||
|
let contentFont = UIFont.preferredFont(forTextStyle: viewModel.isContextParent ? .title3 : .callout)
|
||
|
|
||
|
let contentRange = NSRange(location: 0, length: mutableContent.length)
|
||
|
mutableContent.removeAttribute(.font, range: contentRange)
|
||
|
mutableContent.addAttributes(
|
||
|
[.font: contentFont as Any,
|
||
|
.foregroundColor: UIColor.label],
|
||
|
range: contentRange)
|
||
|
mutableContent.insert(emoji: viewModel.contentEmoji, view: content)
|
||
|
mutableContent.resizeAttachments(toLineHeight: contentFont.lineHeight)
|
||
|
content.attributedText = mutableContent
|
||
|
// content.isHidden = contentTextView.text == ""
|
||
|
}
|
||
|
}
|