Swiftgram/submodules/Display/Source/NavigationTitleNode.swift
2019-11-14 23:27:44 +04:00

59 lines
1.6 KiB
Swift

import UIKit
import AsyncDisplayKit
public class NavigationTitleNode: ASDisplayNode {
private let label: ImmediateTextNode
private var _text: NSString = ""
public var text: NSString {
get {
return self._text
}
set(value) {
self._text = value
self.setText(value)
}
}
public var color: UIColor = UIColor.black {
didSet {
self.setText(self._text)
}
}
public init(text: NSString) {
self.label = ImmediateTextNode()
self.label.maximumNumberOfLines = 1
self.label.truncationType = .end
self.label.displaysAsynchronously = false
super.init()
self.addSubnode(self.label)
self.setText(text)
}
public required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setText(_ text: NSString) {
var titleAttributes = [NSAttributedString.Key : AnyObject]()
titleAttributes[NSAttributedString.Key.font] = UIFont.boldSystemFont(ofSize: 17.0)
titleAttributes[NSAttributedString.Key.foregroundColor] = self.color
let titleString = NSAttributedString(string: text as String, attributes: titleAttributes)
self.label.attributedText = titleString
self.invalidateCalculatedLayout()
}
public override func calculateSizeThatFits(_ constrainedSize: CGSize) -> CGSize {
self.label.updateLayout(constrainedSize)
return self.label.calculatedSize
}
public override func layout() {
self.label.frame = self.bounds
}
}