[ios] 스토리 보드에서 사용자 지정 글꼴이있는 특성 문자열이 올바르게로드되지 않음

우리는 프로젝트에서 사용자 정의 글꼴을 사용하고 있습니다. Xcode 5에서 잘 작동합니다. Xcode 6에서는 코드의 문자열 속성 인 일반 텍스트로 작동합니다. 그러나 스토리 보드에 설정된 해당 문자열은 시뮬레이터 또는 장치에서 실행할 때 모두 Helvetica로 되돌아갑니다.

Xcode 6 또는 iOS 8 SDK의 버그인지 확실하지 않거나 Xcode 6 / iOS 8에서 사용자 지정 글꼴 사용 방법이 변경 되었습니까?



답변

나를위한 해결책은 IBDesignable수업 을 사용하는 것이 었습니다 .

import UIKit

@IBDesignable class TIFAttributedLabel: UILabel {

    @IBInspectable var fontSize: CGFloat = 13.0

    @IBInspectable var fontFamily: String = "DIN Light"

    override func awakeFromNib() {
        var attrString = NSMutableAttributedString(attributedString: self.attributedText)
        attrString.addAttribute(NSFontAttributeName, value: UIFont(name: self.fontFamily, size: self.fontSize)!, range: NSMakeRange(0, attrString.length))
        self.attributedText = attrString
    }
}

Interface Builder에서 다음을 제공합니다.

속성 문자열이있는 Interface Builder 사용자 정의 글꼴

평상시처럼 attributestring을 설정할 수 있지만 사용 가능한 새 속성에서 fontsize 및 fontfamily를 다시 한 번 설정해야합니다.

Interface Builder는 기본적으로 사용자 지정 글꼴로 작업하므로 결과적으로 표시되는 내용 이 표시됩니다. 애플리케이션을 구축 할 때 내가 좋아하는.

노트

평범한 버전 대신 이것을 사용하는 이유는 평범한 스타일을 사용할 때 사용할 수없는 linespacing과 같은 특성 레이블에 속성을 설정하기 때문입니다.


답변

가장 간단한 대답은 글꼴을 FontBook으로 드래그하는 것입니다. 글꼴이 프로젝트에는 있지만 컴퓨터의 FontBook에는없는 경우 IB는 가끔 찾는 데 문제가 있습니다. 이상하지만 여러 번 나를 위해 일했습니다.


답변

서체 목록에 사용자 정의 서체를 추가 할 수 있습니다.

1 단계 : 글꼴 관리를 클릭합니다. 글꼴 북이 열립니다.

여기에 이미지 설명 입력

2 단계 : 더하기를 클릭하고 글꼴을 추가합니다.

여기에 이미지 설명 입력

다음에 속성 텍스트가있는 글꼴을 클릭하면 새로 추가 된 글꼴도 목록에 표시됩니다. 그러나 info.plist 및 번들 리소스에 사용자 정의 글꼴이 추가되었는지 확인하십시오.


답변

이 스레드 덕분에이 솔루션에 도달했습니다.

private let fontMapping = [
    "HelveticaNeue-Medium": "ITCAvantGardePro-Md",
    "HelveticaNeue": "ITCAvantGardePro-Bk",
    "HelveticaNeue-Bold": "ITCAvantGardePro-Demi",
]

func switchFontFamily(string: NSAttributedString) -> NSAttributedString {
    var result = NSMutableAttributedString(attributedString: string)
    string.enumerateAttribute(NSFontAttributeName, inRange: NSRange(location: 0, length: string.length), options: nil) { (font, range, _) in
        if let font = font as? UIFont {
            result.removeAttribute(NSFontAttributeName, range: range)
            result.addAttribute(NSFontAttributeName, value: UIFont(name: fontMapping[font.fontName]!, size: font.pointSize)!, range: range)
        }
    }
    return result
}


답변

내 솔루션은 약간의 해결 방법입니다. 실제 해결책은 애플이 Interface Builder를 수정하는 것입니다.

이를 통해 인터페이스 빌더에서 시스템 글꼴을 사용하여 굵게 및 기울임 꼴 텍스트를 모두 표시 한 다음 런타임에 사용자 정의 글꼴을 렌더링 할 수 있습니다. 모든 경우에 최적이 아닐 수 있습니다.

 NSMutableAttributedString* ApplyCustomFont(NSAttributedString *attributedText,
                     UIFont* boldFont,
                     UIFont* italicFont,
                     UIFont* boldItalicFont,
                     UIFont* regularFont)
{

    NSMutableAttributedString *attrib = [[NSMutableAttributedString alloc] initWithAttributedString:attributedText];
    [attrib beginEditing];
    [attrib enumerateAttribute:NSFontAttributeName inRange:NSMakeRange(0, attrib.length) options:0
                    usingBlock:^(id value, NSRange range, BOOL *stop)
    {
        if (value)
        {
            UIFont *oldFont = (UIFont *)value;
            NSLog(@"%@",oldFont.fontName);

            [attrib removeAttribute:NSFontAttributeName range:range];

            if([oldFont.fontName rangeOfString:@"BoldItalic"].location != NSNotFound && boldItalicFont != nil)
                [attrib addAttribute:NSFontAttributeName value:boldItalicFont range:range];
            else if([oldFont.fontName rangeOfString:@"Italic"].location != NSNotFound && italicFont != nil)
                [attrib addAttribute:NSFontAttributeName value:italicFont range:range];
            else if([oldFont.fontName rangeOfString:@"Bold"].location != NSNotFound && boldFont != nil)
                [attrib addAttribute:NSFontAttributeName value:boldFont range:range];
            else if(regularFont != nil)
                [attrib addAttribute:NSFontAttributeName value:regularFont range:range];
        }
    }];
    [attrib endEditing];

    return attrib;
}

이 게시물에서 영감을 얻음


답변

이 버그로 고생했습니다. UILabel은 사용자 지정 글꼴을 사용하여 IB에서 올바르게 표시되지만 장치 또는 시뮬레이터에서는 올바르게 표시되지 않습니다 (글꼴은 프로젝트에 포함되어 있고 일반 UILabels에서 사용됨).

마침내 (Mac) App Store에서 Attributed String Creator를 찾았습니다. 앱의 적절한 위치에 배치 할 코드를 생성합니다. 환상적입니다. 나는 창조자가 아니라 행복한 사용자 일뿐입니다.


답변

동일한 문제가 발생했습니다. 스토리 보드의 TextView에 대한 속성 글꼴 세트가 XCode 6.1 및 iOS 8 SDK에서 런타임에서 작동하지 않았습니다.

이것이 내가이 문제를 해결 한 방법이며 해결 방법이 될 수 있습니다.

  1. textview의 속성 검사기를 열고 텍스트를 “일반”으로 변경하십시오.

  2. “wC hR”(아래 빨간색)을 삭제하려면 십자가를 클릭하십시오.

    여기에 이미지 설명 입력

  3. 텍스트를 “속성”으로 변경 한 다음 텍스트의 글꼴과 크기를 설정할 수 있습니다.

  4. 작동하는지 확인하기 위해 실행