샘플 프로젝트 : 나는 기본적으로 UILabel
의 아주 기본적인 레크리에이션 무엇인지에 텍스트를 렌더링 TextKit을 사용하고 http://d.pr/f/1coXu텍스트를 렌더링 할 때 TextKit을 사용하면 두 번째 줄이 첫 번째 줄보다 짧아 집니 까?
. 코드는 매우 간단하며이 예에서는 단지 뷰 자체에 하드 NSAttributedString
을 그립니다 그러나
class TextKitView: UIView {
// TextKit Objects
var textStorage: NSTextStorage!
var textContainer: NSTextContainer!
var layoutManager: NSLayoutManager!
override init(frame: CGRect) {
super.init(frame: frame)
backgroundColor = UIColor.clearColor()
layoutManager = NSLayoutManager()
textStorage = NSTextStorage(attributedString: createAttributedString())
textStorage.addLayoutManager(layoutManager)
textContainer = NSTextContainer(size: CGSize(width: bounds.width, height: bounds.height))
layoutManager.addTextContainer(textContainer)
}
required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") }
override func drawRect(rect: CGRect) {
let glyphRange = layoutManager.glyphRangeForTextContainer(textContainer)
layoutManager.drawBackgroundForGlyphRange(glyphRange, atPoint: bounds.origin)
layoutManager.drawGlyphsForGlyphRange(glyphRange, atPoint: bounds.origin)
}
private func createAttributedString() -> NSAttributedString {
let attributedString = NSMutableAttributedString(string: "Test string for testing", attributes: [NSForegroundColorAttributeName: UIColor.blackColor(), NSFontAttributeName: UIFont.systemFontOfSize(16.0)])
let labelAttributedString = NSAttributedString(string: "Foo bar\n testing", attributes: [NSForegroundColorAttributeName: UIColor.darkGrayColor(), NSBackgroundColorAttributeName: UIColor(white: 0.95, alpha: 1.0)])
attributedString.appendAttributedString(labelAttributedString)
return attributedString
}
}
, 내가보기 만들 때 :
override func viewDidLoad() {
super.viewDidLoad()
let textKitView = TextKitView(frame: CGRect(x: 0.0, y: 100.0, width: 320.0, height: 320.0))
view.addSubview(textKitView)
}
을 그것은이처럼 보이는 끝 :
설명 할 수없는 이유로 볼 수있는 두 번째 줄의 배경색과 높이가 상당히 짧습니다. 처음보다, 정말 이상하게 보입니다.
어떻게 방지합니까? 이 문제의 원인은 무엇입니까? UILabel
을 사용하고 동일한 속성 문자열을 제공하면 두 줄의 높이가 모두 동일합니다. 도움이된다면 위에 최소한의 샘플 프로젝트를 첨부했습니다.
질문을 이해하지 못합니다. "Foo bar testing"은 모두 같은 크기입니다. 첫 번째 줄의 배경색 높이는 줄에 더 큰 텍스트가 포함되어 있기 때문에 높이가 더 큽니다. 이를 증명하기 위해 "테스트 용 테스트 문자열"부분을 제거하십시오. 또는 첫 번째 줄 배경색의 맨 아래가 "테스트 용 테스트 문자열"의 "g"디 센더와 어떻게 완벽하게 일치하는지 확인할 수 있습니다. – matt
@matt 좋아요, 다른 말로 표현하면 줄의 내용에 관계없이 높이를 어떻게 일관되게 할 수 있습니까? –
상대적으로 높은 수준의 코드 (TextKit 대 대)를 사용하면 모든 줄에 필요한 큰 글꼴 크기의 공백이 포함되도록 할 수 있습니다 – Feldur