Почему двоеточие отображается ниже, чем все остальные символы в тексте, оканчивающиеся двоеточием, в SwiftUI?

Недавно я начал использовать SwiftUI. Сегодня я столкнулся с самым странным явлением. Когда я отображаю простой текст, заканчивающийся двоеточием, это двоеточие в конце отображается ниже, чем все остальные символы, включая любые другие двоеточия в тексте. Это нормальное ожидаемое поведение SwiftUI? Есть ли способ запретить это?

Вход:

let myText: String = "1:2:3:".trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)
var body: some View {
    Text("8:8:8:")
    Text("8:8:8:8")
    Text(myText)
}

Выход:

Интересно, можете ли вы использовать замену, чтобы проверить строку на пустую, а затем заменить ее старым ASCII невидимого пространства alt-255? 8:8:8: <-- это

easleyfixed 07.08.2024 20:24

Я новичок в Swift и SwiftUI. Я не уверен, что означает «пусто» в этом контексте, поскольку обе строки не были пустыми. Пожалуйста, простите мое невежество.

SAHM 07.08.2024 20:27

Я не использую все это, я имел в виду концепцию типа данных, пустое значение или, в строковых терминах, переменную = "" что-то вроде этого. Интересно, можете ли вы использовать оператор REGEX, чтобы проверить строку, чтобы увидеть, отсутствует ли в ней последнее значение, а затем заменить пустое пространство этим --> <-- это выглядит как пробел, но это ascii, так что это может просто работать чтобы исправить эту проблему. Это не устраняет причину, по которой это происходит, но может ее исправить.

easleyfixed 07.08.2024 20:34

Может ли быть что-то пустое или скрытое, когда я буквально набираю текст («8:8:8:»)

SAHM 07.08.2024 20:35

Ого, вау, это тоже внизу в комментарии, когда я копирую и вставляю сверху. Я уверен, что вы на правильном пути, и я просто туплю, но я не знаю, как это проверить, когда оно было просто буквально напечатано, а не сохранено в строке.

SAHM 07.08.2024 20:38

Ну ладно, значит, в нем должно быть место. Если вы удержите ALT и нажмете 255, вы сгенерируете пространство ASCII, о котором я говорю. Или, возможно, это другой персонаж, но это странно.

easleyfixed 07.08.2024 20:40

В этой статье представлены некоторые пояснения относительно интерполяции строк в SwiftUI. «SwiftUI интерпретирует двоеточие как специальный символ, указывая, что следующий текст должен быть отформатирован как LocalizedStringKey»

workingdog support Ukraine 08.08.2024 03:15
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это функция шрифта, называемая «вертикально центрированное двоеточие». Он автоматически применяется между цифрами. В противном случае он не применяется по умолчанию. В ваших тестах используются только цифры; если бы вы использовали буквы, вы бы увидели другие результаты.

Не все шрифты имеют эту функцию, но San Francisco (здесь используется по умолчанию). Например, добавление .fontDesign(.monospaced) избавит от этого, как и .font(.custom("Helvetica", size: 18)).

Я не знаю хорошего способа изменить функции шрифта SwiftUI. Вы можете сделать это, используя методы, аналогичные UIFont: Как использовать стилистический альтернативный символ?:

struct ContentView: View {
    var body: some View {
        Text("8:8:8:")
            .font(thefont())
    }
}

func thefont() -> Font {
    let baseFont = UIFont.systemFont(ofSize: 18)
    let descriptor = CTFontDescriptorCreateCopyWithFeature(
        baseFont.fontDescriptor,
        kStylisticAlternativesType as CFNumber,
        6 as CFNumber)
    return Font(UIFont(descriptor: descriptor, size: 0.0))
}

Это позволит использовать центрированное двоеточие для всей строки. Это довольно уродливое решение, но я не знаю другого подхода, более дружественного к SwiftUI.

Примечание относительно «... если бы вы использовали буквы, вы увидели бы другие результаты». В моих тестах Text("A:B:C:") дает то же самое нижнее последнее двоеточие, но не Text("a:b:c:")

workingdog support Ukraine 08.08.2024 05:32

Большое спасибо, это решило проблему для меня, и это имеет смысл.

SAHM 08.08.2024 12:48

Другие вопросы по теме