вершина Swift custom font clipping

#swift #swiftui #clipping #custom-font #embedded-fonts

#swift #swiftui #обрезка #пользовательский шрифт #встроенные шрифты

Вопрос:

У меня есть пользовательский шрифт в моем приложении, я правильно добавил его в приложение, я настроил целевое членство, добавил его в файл plist и т. Д., Все в порядке, и я могу использовать шрифт, но верхняя часть некоторых символов обрезана:

Обрезается верхняя часть 1-й строки

Как вы можете видеть, это происходит только в 1-й строке, и это происходит только с этими символами, остальное в порядке.

Когда я выбираю его на холсте, становится совершенно ясно, что верхняя часть обрезается, но настройка рамки этого не меняет, и в любом случае это не вариант в большинстве случаев.

Рамка на холсте

Любое решение для этого? Кто-нибудь еще сталкивался с этой проблемой раньше? Это связано с Swift или SwiftUI, или есть проблема со шрифтом?

Сам код очень прост:

 import SwiftUI

    struct ContentView: View {
        
        var body: some View {
            
            Text("CSOQG-098632 CSOQG-098632")
                .font(.custom("Lausanne-500", size: 44))
                .foregroundColor(.gray)
                
        }
    }
 

Комментарии:

1. Не могли бы вы показать свой код для этого?

2. только что отредактировал исходный вопрос

3. Если вы управляете шрифтом, убедитесь, что метрики шрифта верны. Text невозможно обрабатывать шрифты, которые значительно выходят за рамки их номинальных показателей (я не уточнил, какую именно метрику он использует). Я открыл два FB по этому поводу (FB7545192 «Текстовые клипы Zapfino» и FB7497447 «Текстовые клипы с экстремальными диакритическими знаками («zalgo»)»), но Apple до сих пор игнорировала мои отчеты в течение года.

4. В вашем случае обрезка выполняется для глифов, которые отображаются выше высоты заглавной буквы (что совершенно нормально для глифов с кривой вверху). Я предполагаю, что ваш подъем равен высоте вашей шапки, и вам нужно увеличить свой подъем, чтобы соответствовать вашему фактическому самому высокому глифу.

Ответ №1:

Похоже, проблема с базовым шрифтом. В качестве обходного пути вы можете компенсировать это следующим образом

 Text("CSOQG-098632 CSOQG-098632")
    .font(.custom("Lausanne-500", size: 44))
    .baselineOffset(-10)                      // << tune here !!
    .foregroundColor(.gray)
 

Комментарии:

1. Спасибо, это исправило проблему, к счастью, потребовалось только небольшое смещение!