You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/Session/Shared/SessionTableViewTitleView.s...

105 lines
3.1 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import UIKit
import SessionUIKit
import SessionMessagingKit
import SessionUtilitiesKit
final class SessionTableViewTitleView: UIView {
private static let maxWidth: CGFloat = UIScreen.main.bounds.width - 44 * 2 - 16 * 2
private var oldSize: CGSize = .zero
override var frame: CGRect {
set(newValue) {
super.frame = newValue
if let superview = self.superview {
self.center = CGPoint(x: superview.center.x, y: self.center.y)
}
}
get {
return super.frame
}
}
// MARK: - UI Components
private lazy var titleLabel: UILabel = {
let result: UILabel = UILabel()
result.font = .boldSystemFont(ofSize: Values.mediumFontSize)
result.themeTextColor = .textPrimary
result.lineBreakMode = .byTruncatingTail
return result
}()
private lazy var subtitleLabel: UILabel = {
let result: UILabel = UILabel()
result.font = .systemFont(ofSize: Values.miniFontSize)
result.themeTextColor = .textPrimary
result.lineBreakMode = .byWordWrapping
result.numberOfLines = 0
result.textAlignment = .center
result.set(.width, lessThanOrEqualTo: Self.maxWidth)
return result
}()
private lazy var stackView: UIStackView = {
let result = UIStackView(arrangedSubviews: [ titleLabel, subtitleLabel ])
result.axis = .vertical
result.alignment = .center
return result
}()
private lazy var subtitleLabelHeightConstraint: NSLayoutConstraint = subtitleLabel.set(.height, to: 0)
// MARK: - Initialization
init() {
super.init(frame: .zero)
addSubview(stackView)
stackView.pin([ UIView.HorizontalEdge.trailing, UIView.VerticalEdge.top, UIView.VerticalEdge.bottom ], to: self)
stackView.pin(.leading, to: .leading, of: self, withInset: 0)
}
deinit {
NotificationCenter.default.removeObserver(self)
}
required init?(coder: NSCoder) {
preconditionFailure("Use init() instead.")
}
// MARK: - Content
public func update(title: String, subtitle: String?) {
guard Thread.isMainThread else {
DispatchQueue.main.async { [weak self] in
self?.update(title: title, subtitle: subtitle)
}
return
}
self.titleLabel.text = title
self.titleLabel.font = .boldSystemFont(
ofSize: (subtitle?.isEmpty == false ?
Values.largeFontSize :
Values.veryLargeFontSize
)
)
if let subtitle: String = subtitle {
subtitleLabelHeightConstraint.constant = subtitle.heightWithConstrainedWidth(width: Self.maxWidth, font: self.subtitleLabel.font)
self.subtitleLabel.text = subtitle
self.subtitleLabel.isHidden = false
} else {
self.subtitleLabel.isHidden = true
}
}
}