#ios #swift #swiftui #ios14
#iOS #swift #swiftui #ios14
Вопрос:
Я столкнулся с проблемой с некоторым SwiftUI для кода виджета. Я хочу создать текстовый компонент, который уменьшает текст, но ТОЛЬКО в том случае, если текст, который он содержит, не поместится. Однако я вижу, что он постоянно уменьшает масштаб текста. Кто-нибудь знает, что я делаю не так?
Text(verbatim: entry.records[0].value)
.foregroundColor(.white)
.font(Font.custom("SFCompactDisplay-Thin", size: 48))
.minimumScaleFactor(0.75)
.frame(minWidth: 100, idealWidth: 200, maxWidth: .infinity, minHeight: 48, idealHeight: 48, maxHeight: 48, alignment: .leading)
.padding(.top, 0)
.padding(.bottom, 12)
.padding(.leading, 10)
Комментарии:
1. Пожалуйста, будьте более конкретны: какой текст, в каком макете, контексте и т.д.?
2. Извините, я должен был быть яснее. Это для виджета iOS 14
Ответ №1:
Ваш эффект обусловлен данным .frame
ограничением. Если вы не хотите, чтобы текст масштабировался, не ограничивайте для него рамку, например
Text(verbatim: "World")
.foregroundColor(.white)
.font(Font.custom("SFCompactDisplay-Thin", size: 48))
.minimumScaleFactor(0.75)
.frame(maxWidth: .infinity, alignment: .leading) // << here !!
Примечание: 48 размер шрифта не эквивалентен 48 точкам на экране.
Ответ №2:
Похоже, что после запуска вашего кода работа идет нормально. (Рисунок 1, рисунок 2)
Если у вас все еще есть вопросы, удалите maxWidth: .infinity,
и посмотрите. (Рисунок 3)
Пожалуйста, дайте мне знать, каков конечный результат. Это мой тестовый код.
struct ContentView: View {
var body: some View {
Text(verbatim: "Hello world Hello world Hello world Hello world Hello world")
.foregroundColor(.black)
.font(Font.custom("SFCompactDisplay-Thin", size: 48))
.minimumScaleFactor(0.5)
.frame(minWidth: 100, idealWidth: 200, minHeight: 48, idealHeight: 48, maxHeight: 48, alignment: .leading)
.padding(.top, 0)
.padding(.bottom, 12)
.padding(.leading, 10)
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
обновление # 1
Вы можете обратиться к этому коду для решения проблем с выравниванием. Используйте HStack для макета.
HStack {
Text(verbatim: "Hello")
.foregroundColor(.black)
.font(Font.custom("SFCompactDisplay-Thin", size: 48))
.minimumScaleFactor(0.1)
.frame(minWidth: 10, idealWidth: 120, maxWidth: 120, minHeight: 48, idealHeight: 48, maxHeight: 48, alignment: .leading)
.padding(.top, 0)
.padding(.bottom, 12)
.padding(.leading, 10)
Spacer()
}
Комментарии:
1. Итак, я попытался удалить maxwidth: .infinity, и все равно размер текста по умолчанию меньше 48. Кроме того, удаление maxwidth привело к тому, что текст не был выровнен по левому краю на 100%.
2. Можете ли вы предоставить более подробную информацию о макете? Или вы можете сосредоточиться на проверке
ideaWidth
иmaxWidth
себя.