代码实现思路
- 使用
GeometryReader
获取父视图的大小。
- 根据父视图大小和设定的图片最小阈值,计算出图片和文字可分配的空间。
- 使用优先级布局,优先满足图片的最小尺寸需求,剩余空间给文字。
关键代码片段
import SwiftUI
struct ContentView: View {
let minImageSize: CGFloat = 200
var body: some View {
GeometryReader { geometry in
VStack {
let availableWidth = geometry.size.width
let imageWidth = min(availableWidth, minImageSize)
let textWidth = availableWidth - imageWidth
Image(systemName: "photo")
.resizable()
.frame(width: imageWidth, height: imageWidth)
Text("这是一段文字")
.frame(width: textWidth)
}
}
}
}