Skip to content

Commit 39c076d

Browse files
committed
native label node rendering
1 parent 723e5fd commit 39c076d

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

Demos/Demos/TableViewController.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,8 @@ class SampleCell: UITableViewCell {
143143
return v
144144
}
145145

146-
let titleNode = LabelNode(tag: Tags.Title, text: .Regular(model.title, UIFont.systemFontOfSize(24)), subnodes: [bg1Node]) {
146+
let titleNode = LabelNode(tag: Tags.Title, text: .Regular(model.title, UIFont.systemFontOfSize(24)), numberOfLines: 0, subnodes: [bg1Node]) {
147147
let v = $0 ?? UILabel()
148-
v.numberOfLines = 0
149148
v.textColor = UIColor.darkGrayColor()
150149
v.backgroundColor = UIColor.lightGrayColor().colorWithAlphaComponent(0.2)
151150
return v
@@ -157,11 +156,14 @@ class SampleCell: UITableViewCell {
157156
return v
158157
}
159158

160-
let attr = NSAttributedString(string: model.details, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(12)])
159+
let p = NSMutableParagraphStyle()
160+
p.lineSpacing = 3
161+
p.lineBreakMode = .ByTruncatingTail
161162

162-
let detailsNode = LabelNode(tag: Tags.Details, text: .Attributed(attr)) {
163+
let attr = NSAttributedString(string: model.details, attributes: [NSFontAttributeName: UIFont.systemFontOfSize(12), NSParagraphStyleAttributeName: p])
164+
165+
let detailsNode = LabelNode(tag: Tags.Details, text: .Attributed(attr), numberOfLines: 4) {
163166
let v = $0 ?? UILabel()
164-
v.numberOfLines = 0
165167
v.textColor = UIColor.grayColor()
166168
v.backgroundColor = UIColor.lightGrayColor().colorWithAlphaComponent(0.2)
167169
return v

LayoutOps/LayoutOps/LabelNode.swift

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ public enum LabelNodeString {
1212

1313
public class LabelNode: AnyNode {
1414

15+
private let numberOfLines: Int
1516
private let text: LabelNodeString
16-
public init<T: UILabel>(tag: Taggable, text: LabelNodeString, subnodes: [AnyNode] = [], initializer: (T?)->T) {
17+
public init<T: UILabel>(tag: Taggable, text: LabelNodeString, numberOfLines: Int = 1, subnodes: [AnyNode] = [], initializer: (T?)->T) {
1718
self.text = text
19+
self.numberOfLines = numberOfLines
1820
super.init(tag: tag, subnodes: subnodes) { (label: T?) -> T in
1921

2022
let l = initializer(label)
@@ -25,17 +27,30 @@ public class LabelNode: AnyNode {
2527
l.font = font
2628
l.text = string
2729
}
30+
l.numberOfLines = numberOfLines
2831
return l
2932
}
3033
}
3134

3235
public override func sizeThatFits(size: CGSize) -> CGSize {
3336

37+
struct Cache {
38+
static let label = UILabel()
39+
}
40+
41+
Cache.label.attributedText = nil
42+
Cache.label.text = nil
43+
Cache.label.font = nil
44+
Cache.label.numberOfLines = numberOfLines
45+
3446
switch text {
3547
case .Attributed(let attrString):
36-
return attrString.boundingRectWithSize(size, options: [.UsesLineFragmentOrigin, .UsesFontLeading], context: nil).size
48+
Cache.label.attributedText = attrString
49+
return Cache.label.sizeThatFits(size)
3750
case .Regular(let string, let font):
38-
return (string as NSString).boundingRectWithSize(size, options: [.UsesLineFragmentOrigin, .UsesFontLeading], attributes: [NSFontAttributeName: font], context: nil).size
51+
Cache.label.text = string
52+
Cache.label.font = font
53+
return Cache.label.sizeThatFits(size)
3954
}
4055
}
4156
}

0 commit comments

Comments
 (0)