Есть ли способ, чтобы текстовая метка SwiftUI не двигалась при отображении таймера? - PullRequest
1 голос
/ 08 апреля 2020

У меня есть простая HStack, содержащая 2 Text структуры, отображающие таймер. Он немного меняет положение, пока изменяется значение таймера. Есть ли способ избежать этого поведения.

struct DurationLabel: View {
    let majorDuration: String // the hours/minutes part "00:00"
    let minorDuration: String // the seconds part "00"

    var body: some View {
        HStack(spacing: 0) {
            Text(majorDuration + minorDuration)
                .font(.system(size: 90))
            Text(minorDuration)
                .font(.body)
        }
    }
}

Demo GIF

Ответы [ 2 ]

5 голосов
/ 08 апреля 2020

Для таких дисплеев я предпочитаю использовать шрифт с разноцветными цифрами. Вы можете использовать их в своем тексте так:

Text("your Text here").font(Font.largeTitle.monospacedDigit())
0 голосов
/ 09 апреля 2020

Я делал это несколько раз для аудиоплееров и т. Д. c ... Если вы хотите сохранить один и тот же шрифт, вы можете сделать что-то вроде:

ZStack {
  Text("00:00").opacity(0.0)
  Text("MM:SS") // Put your actual numbers in here with the same formatting.
}

ZStack изменит размер на основе самого большого подпредставления, а 0 - это самый широкий ди git практически любого шрифта.

Этот метод работает для любого типа контента, который может изменить размер. Просто загрузите «фиктивный» вид с максимально возможной версией и скройте его. Тогда держите ваш реальный контент в видимом виде. Тогда вы можете избежать жесткого кодирования размера кадра, например c ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...