StatusContentLabel: remove unnecessary height correction
This commit is contained in:
parent
4b1a2c1f3b
commit
2d0116a2a9
|
@ -42,7 +42,6 @@ class StatusContentLabel: UILabel {
|
||||||
private lazy var textStorage = NSTextStorage()
|
private lazy var textStorage = NSTextStorage()
|
||||||
private lazy var layoutManager = NSLayoutManager()
|
private lazy var layoutManager = NSLayoutManager()
|
||||||
private lazy var textContainer = NSTextContainer()
|
private lazy var textContainer = NSTextContainer()
|
||||||
private var heightCorrection: CGFloat = 0
|
|
||||||
private var selectedElement: (range: NSRange, url: URL)?
|
private var selectedElement: (range: NSRange, url: URL)?
|
||||||
|
|
||||||
private var links: [NSRange: URL] = [:]
|
private var links: [NSRange: URL] = [:]
|
||||||
|
@ -68,10 +67,10 @@ class StatusContentLabel: UILabel {
|
||||||
let range = NSRange(location: 0, length: textStorage.length)
|
let range = NSRange(location: 0, length: textStorage.length)
|
||||||
|
|
||||||
textContainer.size = rect.size
|
textContainer.size = rect.size
|
||||||
let newOrigin = textOrigin(in: rect)
|
let origin = rect.origin
|
||||||
|
|
||||||
layoutManager.drawBackground(forGlyphRange: range, at: newOrigin)
|
layoutManager.drawBackground(forGlyphRange: range, at: origin)
|
||||||
layoutManager.drawGlyphs(forGlyphRange: range, at: newOrigin)
|
layoutManager.drawGlyphs(forGlyphRange: range, at: origin)
|
||||||
}
|
}
|
||||||
|
|
||||||
override var intrinsicContentSize: CGSize {
|
override var intrinsicContentSize: CGSize {
|
||||||
|
@ -84,14 +83,12 @@ class StatusContentLabel: UILabel {
|
||||||
private func element(at location: CGPoint) -> (range: NSRange, url: URL)? {
|
private func element(at location: CGPoint) -> (range: NSRange, url: URL)? {
|
||||||
guard textStorage.length > 0 else { return nil }
|
guard textStorage.length > 0 else { return nil }
|
||||||
|
|
||||||
var correctLocation = location
|
|
||||||
correctLocation.y -= heightCorrection
|
|
||||||
let boundingRect = layoutManager.boundingRect(forGlyphRange: NSRange(location: 0, length: textStorage.length), in: textContainer)
|
let boundingRect = layoutManager.boundingRect(forGlyphRange: NSRange(location: 0, length: textStorage.length), in: textContainer)
|
||||||
guard boundingRect.contains(correctLocation) else {
|
guard boundingRect.contains(location) else {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
let index = layoutManager.glyphIndex(for: correctLocation, in: textContainer)
|
let index = layoutManager.glyphIndex(for: location, in: textContainer)
|
||||||
|
|
||||||
for (range, url) in links {
|
for (range, url) in links {
|
||||||
if index >= range.location && index <= range.location + range.length {
|
if index >= range.location && index <= range.location + range.length {
|
||||||
|
@ -248,11 +245,7 @@ class StatusContentLabel: UILabel {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// is this necessary?
|
textStorage.setAttributedString(attributedText)
|
||||||
let mutAttrString = addLineBreak(attributedText)
|
|
||||||
// let mutAttrString = NSMutableAttributedString(attributedString: attributedText)
|
|
||||||
|
|
||||||
textStorage.setAttributedString(mutAttrString)
|
|
||||||
_customizing = true
|
_customizing = true
|
||||||
text = attributedText.string
|
text = attributedText.string
|
||||||
_customizing = false
|
_customizing = false
|
||||||
|
@ -276,11 +269,4 @@ class StatusContentLabel: UILabel {
|
||||||
return mutAttrString
|
return mutAttrString
|
||||||
}
|
}
|
||||||
|
|
||||||
private func textOrigin(in rect: CGRect) -> CGPoint {
|
|
||||||
let usedRect = layoutManager.usedRect(for: textContainer)
|
|
||||||
heightCorrection = (rect.height - usedRect.height) / 2
|
|
||||||
let glyphOriginY = heightCorrection > 0 ? rect.origin.y + heightCorrection : rect.origin.y
|
|
||||||
return CGPoint(x: rect.origin.x, y: glyphOriginY)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue