Вы можете использовать GeometryReader
, чтобы получить эту информацию от родителя:
struct MyView: View {
var body: some View {
GeometryReader { geometry in
/*
Implement your view content here
and you can use the geometry variable
which contains geometry.size of the parent
You also have function to get the bounds
of the parent: geometry.frame(in: .global)
*/
}
}
}
Вы можете иметь собственную структуру для вас View
и привязать ее геометрию к переменной, чтобы сделать ее геометрию доступной изиз самого View
.
- Пример:
Сначала определите представление с именем GeometryGetter (отдавая должное @kontiki):
struct GeometryGetter: View {
@Binding var rect: CGRect
var body: some View {
return GeometryReader { geometry in
self.makeView(geometry: geometry)
}
}
func makeView(geometry: GeometryProxy) -> some View {
DispatchQueue.main.async {
self.rect = geometry.frame(in: .global)
}
return Rectangle().fill(Color.clear)
}
}
Затем, чтобы получитьграницы текстового представления (или любого другого представления):
struct MyView: View {
@State private var rect: CGRect = CGRect()
var body: some View {
Text("some text").background(GeometryGetter($rect))
// You can then use rect in other places of your view:
Rectangle().frame(width: 100, height: rect.height)
}
}