일본어로 행간의 잘못을 만지작거리다
let style = NSMutableParagraphStyle()
style.lineSpacing = 10.0 // 行間設定
let attr = [NSParagraphStyleAttributeName: style, NSFontAttributeName: font]
let attrStr = NSMutableAttributedString(string: text, attributes: attr)
label.attributedText = attrStr
일본어에 한 줄만 표시되면 들어갈 수 없었던 줄 사이의 공간이 아래에 있습니다.(원인이 불분명하다.)
여러 줄과 자모표를 쓸 때는 예상대로 된다.
대책
1행과 높이
フォントの高さ+行間スペース
에서만 높이를 フォントの高さ
로 조정할 수 있는 하위 클래스를 실현했다.class LineSpacingLabel: UILabel {
var adjustedHeight = CGFloat(0.0)
var adjustedForLineSpacingBug = false
override func drawText(in rect: CGRect) {
var baseRect = rect
// 本来の描画されるスペースを小さくしているため、そのままにすると上下が切れてしまうのでここで調整する
if adjustedForLineSpacingBug {
baseRect.origin.y = adjustedHeight / 2.0
}
super.drawText(in: baseRect)
}
override var intrinsicContentSize: CGSize {
let baseSize = super.intrinsicContentSize
adjustedHeight = 0.0
adjustedForLineSpacingBug = false
// lineSpacingを設定しているかつlineSpacingが0以外の時のみ処理を行う
if let paragraphStyle = attributedText?.attribute(NSParagraphStyleAttributeName, at: 0, effectiveRange: nil) as? NSParagraphStyle,
paragraphStyle.lineSpacing != 0.0 {
let fontHeight = ceil(self.font.lineHeight)
let lineSpacing = paragraphStyle.lineSpacing
// 固有サイズの高さがフォントの高さ+行間スペースの場合(1行だけど下に行間スペースが挿入されている場合)
// 本来の高さに変更する
if baseSize.height == fontHeight + lineSpacing {
adjustedHeight = lineSpacing
adjustedForLineSpacingBug = true
return CGSize(width: baseSize.width, height: fontHeight)
}
}
return baseSize
}
}
이렇게 되면 일본어 한 줄도 이상한 공간을 열 수 없게 된다.
TextKit를 쓰면 조금 더 엄격해도 괜찮지만 이번엔 문제가 없으니 당분간 놔둬.
기타
더 좋은 실크가 있으면 메시지를 남겨 주세요!
그리고 NSAttributed String 사용할 때 이거 쓰면 편해요!
https://github.com/delba/TextAttributes
이 실시의 샘플은 다음과 같다.
https://github.com/furuyan/LineSpacingSapmle
Reference
이 문제에 관하여(일본어로 행간의 잘못을 만지작거리다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/furuyan/items/2fdb393d80940c0d65ea텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)