FYI... I know there is a way around it (using something similar to the viewSizeReader func and a ZStack)... but from my perspective it just doesn't work the way I perceive it should.
For anyone interested... This is a workaround
struct QuickTest: View {
@State var textWidth = CGFloat.zero
func viewSizeReader() -> some View {
return GeometryReader { geometry -> Color in
print(geometry.frame(in: .local)); return .clear }}
func viewWidthReader(_ binding: Binding<CGFloat>) -> some View {
return GeometryReader { geometry -> Color in
let rect = geometry.frame(in: .local)
DispatchQueue.main.async {
binding.wrappedValue = rect.size.width
}
return .clear
}
}
var body: some View {
VStack(spacing: 0) {
HStack(spacing: 0) {
Text("A very looooong string to test with")
.frame(minWidth: 5, idealWidth: 50, maxWidth: 100, alignment: .leading)
.lineLimit(1)
.border(.red, width: 1)
.background(viewSizeReader())
ZStack {
Text("short")
.fixedSize(horizontal: true, vertical: false)
.foregroundColor(.clear)
.lineLimit(1)
.background(viewWidthReader($textWidth))
Text("short")
.frame(width: textWidth)
.lineLimit(1)
.border(.red, width: 1)
.background(viewSizeReader())
}
Spacer()
}
Spacer()
}
}
}