// 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 } } }