Длинный текст RTL обрезается / переполняется справа в SwiftUI - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть несколько длинных текстов RTL (иврит), которые я хочу отобразить полностью (на нескольких строках, без переноса), и они остаются переполненными / отсеченными справа, независимо от того, как я пытался это исправить.

Это на самом деле проблема в компоненте Text, но стоит упомянуть, что я пытался содержать элементы как в List, так и в ScrollView, но безуспешно решить проблему (в то время как ScrollView дал немного лучшие результаты). Вот как это выглядит:

Вид элемента - обрезанный текст

Пример «плохого» текста (на iPhone 11 Pro Max):

פגשדשעצשדלעצשדלעצשדלעצשלדצע שדצגךגתךת שדכצשדלכצדלעצשדלעצדשלעצשדלעשדלעצשדלעצשכידי געדגדגיג גיחלג דגחידחד דגיכחדגחדגח דחדכחדגחדגחחחחחחחחחחדלעצשדלעצשדלעצדשצעשדעגצ לגצעלדשצעכשלדעצלשד שדלעצשדלע שלדצעלשדעדלשעצשליפי

имеет ли кто-нибудь имеет ключ, как я могу решить эту проблему? На самом деле это мой первый вопрос в StackOverflow, вот насколько я в отчаянии:)

Это ScrollView:

ScrollView {
    VStack(alignment: .leading, spacing: 10) {
        ForEach(self.items, id: \.id) { item in
            item
        }
    }
}

А это элемент:

var body: some View {
    VStack(alignment: .leading) {
        HStack {
            Text(reporter)
                .font(.caption)
            Text(formatDate(date: date))
                .font(.caption)
                .foregroundColor(.gray)
        }

        Text(text)
            .font(.body)
            .fixedSize(horizontal: false, vertical: true)
    }
    .padding() 
}

Я использую .environment(\.layoutDirection, .rightToLeft) на ContentView:

let contentView = ContentView()
.environment(\.colorScheme, .dark)
.environment(\.layoutDirection, .rightToLeft)

Спасибо, Ури

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

с учетом «плохого» текста, следующая комбинация для Item, похоже, работает на ios 13.4.1 в iPhone 11 Pro Max (симулятор), iPhone 10 (реальное устройство) и катализаторе macos. Но опять же я не могу читать на иврите, чтобы знать наверняка.

struct Item: View, Identifiable {

var id = UUID().uuidString
var text = ""

// testing with simple " and tripple """
init(_ tx: Int) {
    if tx == 1 {
        text = "פגשדשעצשדלעצשדלעצשדלעצשלדצע שדצגךגתךת שדכצשדלכצדלעצשדלעצדשלעצשדלעשדלעצשדלעצשכידי געדגדגיג גיחלג דגחידחד דגיכחדגחדגח דחדכחדגחדגחחחחחחחחחחדלעצשדלעצשדלעצדשצעשדעגצ לגצעלדשצעכשלדעצלשד שדלעצשדלע שלדצעלשדעדלשעצשליפי"
    } else {
        text = """
        פגשדשעצשדלעצשדלעצשדלעצשלדצע שדצגךגתךת שדכצשדלכצדלעצשדלעצדשלעצשדלעשדלעצשדלעצשכידי געדגדגיג גיחלג דגחידחד דגיכחדגחדגח דחדכחדגחדגחחחחחחחחחחדלעצשדלעצשדלעצדשצעשדעגצ לגצעלדשצעכשלדעצלשד שדלעצשדלע שלדצעלשדעדלשעצשליפי
        """
    }
}

var body: some View {
    VStack(alignment: .trailing) {
        Text(text)
            .font(.body)
            .fixedSize(horizontal: false, vertical: true)
    }.padding(.leading, 10)
}
}
0 голосов
/ 16 апреля 2020

Я создал простой тест для отображения текста на иврите, который, на мой взгляд, не выглядит обрезанным: текст копируется и вставляется откуда-то на net.

struct ContentView: View {
@State var items = [Itemx(1), Itemx(2)]
var body: some View {
    ScrollView {
        VStack(alignment: .leading, spacing: 10) {
            ForEach(self.items, id: \.id) { item in
                item
            }
        }
    }
}
}

struct Itemx: View, Identifiable {
var id = UUID().uuidString
var text = ""

init(_ tx: Int) {
    if tx == 1 {
        text = "פליה כלשהיא מטעמי גזע, צבע, מין, לשון, דח, דעה פוליטית או דעה בבעיות אחרות, בגלל מוצא לאומי או חברתי, קנין, לידה או מעמד אחר. גדולה מזו, לא יופלה אדם על פי מעמדה המדיני, על פי סמכותה או על פי מעמדה הבינלאומי של המדינה או הארץ שאליה הוא שייך, דין שהארץ היא עצמאית, ובין שהיא נתונה לנאמנות, בין שהיא נטולת שלטון עצמי ובין שריבונותה מוגבלת כל הגבלה אחרת"
    } else {
        text = """
        מבוקשים. ב עסקים אחרות לחשבון אחד, לערך הבאים אחר של, אם אחר אינו ספרות. לכאן משפטית את תנך, אחר אל רוסית נבחרים, שנורו גיאוגרפיה לרפובליקה אם סדר. פיסיקה טכניים שימושיים כדי בה.

        כדור המלחמה ביולוגיה של זכר, לוח אספרנטו סוציולוגיה של. ויקי לאחרונה קרן מה. על רקטות פולנית בדף, החלה ארכיאולוגיה על בדף. שתפו פולנית או אחד. משחקים פילוסופיה אתה ב, ויש המזנון תקשורת של, גם אחר בחירות מיתולוגיה. בדף שנתי לציין בחירות דת, אל כלליים תיאטרון גיאוגרפיה כתב.

        על נוסחאות האנציקלופדיה העריכהגירסאות עוד, הרוח מדויקים המקושרים כלל על, בה תיבת בהבנה לעברית היא. חפש בהשחתה כלליים פסיכולוגיה או. כלשהו מדינות ב שער, חפש לערוך לחשבון של. אנא סרבול צרפתית גם, אחד של קודמות מועמדים. אם שתי מאמר ומדעים חרטומים, פיסול בדפים זכויות שכל ב. צ'ט למנוע עיצוב הבהרה מה, הבקשה איטליה מבוקשים או זכר. מה בקר כלכלה ספרדית.

        זאת רוסית ביולי את, אנגלית ותשובות ויקימדיה היא מה, אל זאת ספרדית חופשית. בקר ספרדית משחקים התפתחות דת. בה מרצועת קצרמרים קרימינולוגיה מתן, רקטות לתרום טכנולוגיה על מתן, שנתי רפואה על כתב. מתן ובמתן תקשורת המקושרים בה. המדינה ומהימנה דת שמו.

        גם מדע הטבע הבאים ברוכים. החברה למתחילים היא אם. העזרה לרפובליקה בה עזה, מיוחדים מאמרשיחהצפה תנך דת. הרוח מיזמים בלשנות או שער, מלא חשמל שדרות בקלות אם, כתב זקוק עסקים מאמרשיחהצפה אם.

        חפש על כיצד ובמתן. מדינות למאמרים מדע דת, על כתב שונה פילוסופיה אתנולוגיה, על תרבות בארגז למתחילים לוח. שיתופית מבוקשים כלל אם, ניהול ספינות ויש בה, גם עזה כניסה ריקוד היסטוריה. פיסיקה לויקיפדיה ביוטכנולוגיה ויש בה, מתמטיקה תאולוגיה מלא או. שפות משפטית את אתה, הקנאים ויקיפדיה מדע ב. שמות דרכה שנורו בה שער, ויש חשמל טכנולוגיה על.

        שנורו לתרום היא על, בשפה קישורים מה כדי. גם ויש בארגז סוציולוגיה. ליום מונחונים על אחד. מיזמים כלליים רשימות צ'ט גם, מדע קבלו אחרים אם. לחבר ניהול קלאסיים אנא גם, או ומהימנה תאולוגיה שמו, ויש דת משפטים קולנוע.

        מדע ב בכפוף ברוכים. לוח בשפות סטטיסטיקה דת. הגרפים האנציקלופדיה על אחד, לוח אל הגרפים אינטרנט מיוחדים, של עזה רקטות וכמקובל. אל אחר תיבת רקטות, כיצד סטטיסטיקה בה כלל. העיר קולנוע איטליה דת לוח, כתב חינוך ברוכים נוסחאות אל. מדע החלה יוצרים ב.

        ארץ ראשי שדרות אינטרנט דת, מתן מיותר נוסחאות מה. אל עזה ספרדית צרפתית זכויות, רבה לעברית ומהימנה גם. החלל עזרה אירועים של שמו, צ'ט או תקשורת רשימות. מוגש מדעי סדר של. דת יוני פיסול שתי, של עוד בשפה שימושי מתמטיקה. בה מיזמים הנאמנים כלל, קרן את המדינה ומהימנה, ויש על נפלו ביולוגיה. שער שונה ביולי תחבורה את.

        אחרים בשפות העריכהגירסאות ב מדע. חפש בה פיסול רוסית מדינות. צ'ט קהילה פילוסופיה על, רקטות אודות שתי את, או לעריכה בלשנות מאמרשיחהצפה מתן. כדי המלחמה עקרונות אל, אנא אודות המזנון קצרמרים או.
        """
    }
}

var body: some View {
    VStack(alignment: .leading) {
        Text(text)
            .font(.body)
            .fixedSize(horizontal: false, vertical: true)
    }.padding()
}
}
...