iOS Playground自定义字体添加失败求助:一款生效一款无效
Hey there! Let's troubleshoot that stubborn font issue together. I've run into similar headaches with custom fonts in Playgrounds before, so here are actionable steps to get your conduit_itc font working:
1. Double-Check File & Naming Details
- First, confirm the exact filename matches what you're using in code—Playgrounds are case-sensitive! If your font file is named
Conduit_ITC.ttfinstead ofconduit_itc.ttf, the bundle won't find it. - Right-click the font file, select "Get Info", and note the PostScript Name and Full Name. These are often different from the filename, and you'll need the correct PostScript/Full Name when actually using the font in UI elements.
2. Verify the Font is Properly Added to Playground Resources
- In Xcode, select your Playground file, open the File Inspector (right-hand panel), and scroll to the Resource Tags section. Ensure
conduit_itc.ttfis listed here. If not:- Drag the font file back into your Playground's resource folder, making sure to check "Copy items if needed" and select your Playground as the target.
- Test if the bundle can locate the file with this quick snippet:
If it prints the error, your file wasn't added correctly—repeat the drag-and-drop step carefully.if let fontURL = Bundle.main.url(forResource: "conduit_itc", withExtension: "ttf") { print("Font found at: \(fontURL)") } else { print("ERROR: Font file not found in bundle!") }
3. Fix the Font Registration Code
Your code was cut off, so here's a complete, error-handling version to avoid crashes and get feedback:
if let fontURL = Bundle.main.url(forResource: "conduit_itc", withExtension: "ttf") as CFURL? { var registrationError: Unmanaged<CFError>? let registrationSuccess = CTFontManagerRegisterFontsForURL( fontURL, CTFontManagerScope.process, ®istrationError ) if registrationSuccess { print("Conduit font registered successfully!") } else { if let error = registrationError?.takeRetainedValue() { print("Registration failed: \(error.localizedDescription)") } } } else { print("Font URL is nil—check filename and resource setup!") }
This will tell you exactly why registration fails (e.g., corrupted font file, duplicate registration).
4. Use the Correct Font Name in UI Elements
Even if registration works, you need to reference the font's actual name (not the filename). Run this code to list all registered fonts and find your conduit font's proper name:
UIFont.familyNames.forEach { familyName in print("Family: \(familyName)") UIFont.fontNames(forFamilyName: familyName).forEach { fontName in print(" → \(fontName)") } }
Search the output for "Conduit" or related keywords, then use that exact fontName when creating your font:
let conduitFont = UIFont(name: "ConduitITC-Bold", size: 18) // Replace with your found name
5. Validate the Font File Itself
Open conduit_itc.ttf in Mac's Font Book. If it shows a warning like "Damaged" or "Invalid", the file is corrupted—download a fresh copy of the font and repeat the setup steps.
内容的提问来源于stack exchange,提问作者Grazia Bo

