반응형
NSAttributedString에서 세로로 크기가 다른 두 글꼴을 가운데에 배치합니다.
NSAttributedString
두 가지 크기의 문자열을 생성하는 데 사용 합니다. 기본적으로 하단 정렬은 다음과 같습니다.
하지만 다음과 같이 수직으로 중앙에 배치하고 싶습니다.
명확하게 말하면, 이것은 둘 이상의 속성이 아닌 단일 속성 문자열입니다. 이것은 제 질문을 설명하기위한 간단한 예입니다. 제가 실제로하고 싶은 것은 더 복잡합니다.
가장 쉬운 방법 NSBaselineOffsetAttributeName
은 해당 텍스트 의 속성을 조작하는 것입니다.
NSBaselineOffsetAttributeName
이 속성의 값은 기준선으로부터의 문자 오프셋을 포인트 단위로 나타내는 부동 소수점 값을 포함하는 NSNumber 객체입니다. 기본값은 0입니다.
중앙에 맞추려면 큰 텍스트의 높이와 작은 텍스트의 높이의 차이를 반으로 줄인 다음 기준 조정으로 사용합니다.
다음은를 사용하여 더 작은 텍스트를 세로로 정렬하는 작업 예제 NSBaselineOffsetAttributeName
입니다.
NSString *bigString = @"BIG";
NSString *smallString = @"Small String";
NSString *fullString = [NSString stringWithFormat:@"%@ %@", bigString, smallString];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:fullString];
NSRange bigStringRange = NSMakeRange(0, bigString.length);
NSRange smallStringRange = NSMakeRange(bigStringRange.length, smallString.length);
[string beginEditing];
//Set big string font and size
[string addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:28.0]
range:bigStringRange];
//set small string font and size
[string addAttribute:NSFontAttributeName
value:[UIFont systemFontOfSize:18.0]
range:smallStringRange];
//Set small string baseline offset
[string addAttribute:NSBaselineOffsetAttributeName
value:[NSNumber numberWithFloat:3.0] //adjust this number till text appears to be centered
range:smallStringRange];
[string endEditing];
Swift에서 YasT의 답변 :
스위프트 4
let bigString = "BIG"
let smallString = "Small String"
let fullString = "\(bigString) \(smallString)"
let string = NSMutableAttributedString(string: fullString)
let bigStringRange = NSRange(location: 0, length: bigString.utf16.count)
let smallStringRange = NSRange(location: bigStringRange.length + 1, length: smallString.utf16.count)
let bigStringFontSize: CGFloat = 28
let smallStringFontSize: CGFloat = 18
string.beginEditing()
string.addAttribute(.font, value: UIFont.systemFont(ofSize: bigStringFontSize), range: bigStringRange)
string.addAttribute(.font, value: UIFont.systemFont(ofSize: smallStringFontSize), range: smallStringRange)
string.addAttribute(.baselineOffset, value: (bigStringFontSize - smallStringFontSize) / 2, range: smallStringRange)
string.endEditing()
스위프트 3
let bigString = "BIG"
let smallString = "Small String"
let fullString = "\(bigString) \(smallString)"
let string = NSMutableAttributedString(string: fullString)
let bigStringRange = NSRange(location: 0, length: bigString.utf16.count)
let smallStringRange = NSRange(location: bigStringRange.length + 1, length: smallString.utf16.count)
let bigStringFontSize: CGFloat = 28
let smallStringFontSize: CGFloat = 18
string.beginEditing()
string.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: bigStringFontSize), range: bigStringRange)
string.addAttribute(NSFontAttributeName, value: UIFont.systemFont(ofSize: smallStringFontSize), range: smallStringRange)
string.addAttribute(NSBaselineOffsetAttributeName, value: (bigStringFontSize - smallStringFontSize) / 2, range: smallStringRange)
string.endEditing()
더 나은 솔루션은 글꼴 타이포그래피에서 NSBaselineOffsetAttributeName을 계산하는 것입니다 (짧은 기사 https://www.raizlabs.com/dev/2015/08/advanced-ios-typography/ )
속성 문자열의 두 번째 부분에 대한 속성을 설정합니다.
secondPartAttributes[NSBaselineOffsetAttributeName] = @((firstFont.xHeight - secondFont.xHeight)/2);
반응형
'programing' 카테고리의 다른 글
SVN 프로젝트에서 Eclipse 프로젝트 파일 무시 (0) | 2021.01.19 |
---|---|
자바 스크립트에서 키 누름을 감지하는 가장 간단한 방법 (0) | 2021.01.18 |
Images.xcassets에서 이미지를 현지화하는 방법은 무엇입니까? (0) | 2021.01.18 |
React JSX : 해시를 통해 반복하고 각 키에 대한 JSX 요소 반환 (0) | 2021.01.18 |
Kafka 주제의 복제본 수를 변경하는 방법은 무엇입니까? (0) | 2021.01.18 |