我正在构建一个小部件,其中包含一些文本,这些文本是一个简短的单词和短语列表。
富
酒吧
巴兹
困惑
添加另一个
还有一个
目前的结果是:
因为它是一个简短项目的列表,所以如果它可以分成两列,效果会更好,如下所示
Foo Add another
Bar And one more
Baz
Bewildered
下面是当前的简单代码(去掉了字体和空格):
struct WidgetEntryView : View {
var entry: Provider.Entry
var body: some View {
ZStack {
Color(entry.color)
VStack(alignment: .leading) {
Text(entry.name)
Text("Updated in 6 hours")
Text(entry.content)
}
}
}
}
我发现this guide可以告诉我文本是否被截断了,但是我需要知道 * 什么 * 文本被截断了,这样我就可以在右边添加另一个Text
视图来显示剩余的字符,或者最好使用一些本地方法来在两个文本视图之间延续文本。
2条答案
按热度按时间xtfmy6hx1#
这当然不是理想的,但这是我的想法。要点是我使用问题中链接的截断文本范例来获得可用高度。然后我使用小部件的宽度减去填充来迭代文本,直到它不再适合一半的宽度。
一些缺点是:(1)左列必须是小部件宽度的一半或更小,而实际上,如果它更大,有时可以容纳更多的内容,(2)很难100%确定所有的间距都被考虑在内,以及(3)必须硬编码小部件的尺寸。
无论如何,希望这对任何寻找类似解决方案的人有所帮助!
下面是为清晰起见删除了间距和颜色的代码:
vfh0ocws2#
使用视图的框架修饰符
这可以使用帧修改器完成。
尝试创建一个
HStack
,其中的每个视图将获得与.frame(minWidth: 0, maxWidth: .infinity)
相同的帧修改器。这将平均分配视图。
看了你的代码我觉得这个可以用。
请参阅这篇文章:
SwiftUI: Two equal width columns