【问题标题】:Long RTL Text gets cut-off/overflown on right in SwiftUI长 RTL 文本在 SwiftUI 中被截断/溢出
【发布时间】:2020-04-16 11:21:59
【问题描述】:

我想要完整显示的 RTL(希伯来语)文本有点长(在多行上,不换行),并且无论我如何尝试修复它,它都会在右侧溢出/截断。

这实际上是 Text 组件中的一个问题,但值得一提的是,我尝试在 List 和 ScrollView 中包含项目,但没有成功解决问题(而 ScrollView 产生了更好的结果)。这是它的外观:

Item View - text being cut

“错误”文本示例(在 iPhone 11 Pro Max 上):

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

有没有人知道我该如何解决这个问题?这实际上是我在 StackOverflow 中的第一个问题,这就是我的绝望:)

这是滚动视图:

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() 
}

我在ContentView 上使用.environment(\.layoutDirection, .rightToLeft)

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

谢谢, 乌里

【问题讨论】:

  • 您能添加一些示例希伯来语字符串进行测试吗?你想让它们被包裹起来还是什么?
  • 我添加了一个例子,谢谢。我不希望它们被包装(我想完整地显示它们)

标签: swift swiftui-list swiftui swiftui-environment


【解决方案1】:

我创建了一个简单的测试来显示我认为看起来没有被截断的希伯来语文本: 从网上某处复制并粘贴文本。

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()
}
}

【讨论】:

  • 并非所有文本都被切碎。有些文本按应有的方式呈现,有些文本呈现很差。它因字符数而异。例如,下列文本在iPhone 11 Pro Max上被切碎:פגשדשעצשדלעצשדלעצשדלעצשלדצעשדצגךגתךתשדצגךגתךתיניהיגליחלגלידחדדחדיכחדגחדגחכחדגחדגחיכחדגחדגחכחדגחדגחדחדכחדגחדגחחחחחחחחחחדלעצשדלעצשדלעצדשצעשדעגצלגצעלדשצעכשלדעצלשדשדלעצשדלעיפי span>
【解决方案2】:

鉴于“坏”文本示例,以下项目组合似乎适用于 iPhone 11 Pro Max(模拟器)、iPhone 10(真实设备)和 macos 催化剂中的 ios 13.4.1。但话又说回来,我无法确定希伯来语。

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)
}
}

【讨论】:

  • 这确实修复了这个特定的“坏”文本,但修复它所需的填充在所有文本中并不是恒定的,因此不是一个简洁的解决方案
猜你喜欢
  • 1970-01-01
  • 2020-04-18
  • 2013-02-23
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-01-08
  • 2014-11-28
  • 1970-01-01
相关资源
最近更新 更多