swiftui - 如何防止 Text 扩展 VStack 的宽度
问题描述
我有一个VStack
包含一个Image
和一个Text
。我将图像的宽度(和高度)设置为屏幕宽度的一半:
struct PopularNow: View {
let item = popular[0]
var body: some View {
VStack(spacing: 5) {
Image(item.image)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: getRect().width/2, height: getRect().width/2)
Text(item.description)
.font(.caption)
.fontWeight(.bold)
.lineLimit(0)
}
.padding()
.background(Color.gray.opacity(0.1))
.cornerRadius(15)
}
func getRect() -> CGRect {
return UIScreen.main.bounds
}
}
问题是Text
推动并导致VStack
扩展而不是尊重Image
' 的宽度。我怎么能告诉Text
水平增长不要超过Image
宽度并“垂直”增长(即添加它需要的行数)?我知道我可以将frame
修饰符添加到VStack
自身,但这似乎是一个 hack。我想告诉它只占用已经有的Text
空间宽度,而不是更多。VStack
这就是它现在的样子,你可以看到 VStack 不是屏幕大小的一半,而是全屏大小,因为它Text
正在扩展它。
解决方案
尝试修复它的大小,比如
VStack(spacing: 5) {
Image(item.image)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: getRect().width/2, height: getRect().width/2)
Text(item.description)
.font(.caption)
.fontWeight(.bold)
.lineLimit(0)
}
.fixedSize() // << here !!
// .fixedSize(horizontal: true, vertical: false) // alternate
.padding()
推荐阅读
- mysql - mysqldump:错误1412:表定义已更改,请重试事务
- laravel - Laravel 5.8.9 @error 指令的身份验证问题 - 未定义的变量:消息
- vba - 为代码创建的控件创建鼠标事件
- reactjs - Webpack - TypeError:$ 不是函数
- java - 为什么 O(n) 时间复杂度的 leetcode 提交比 O(n log n) 时间复杂度的运行时间更长?
- php - Vimeo API PHP 调用
- powershell - 比较来自不同目录的文件夹名称并将两个结果输出到 csv - PowerShell
- c++ - 如何使用 Arduino 去抖动位掩码读数?(不是按钮...)
- gnuplot - 使用范围时,stats 命令不返回预期值
- c# - 删除第一个事件之后的所有事件,直到第一个事件被处理