Как использовать GeometryReader без заполнения View
Это макет, к которому я стремлюсь.
import SwiftUI
import PlaygroundSupport
struct TestView: View {
let text: String
var body: some View {
Text(self.text)
}
}
struct ContentView: View {
var body: some View {
ZStack {
TestView(text: "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla")
.frame(width: 250)
.background(Color.red)
}
}
}
PlaygroundPage.current.setLiveView(ContentView())
Но я также хочу использовать GeometryReader
и когда я поставил Text
внутри GeometryReader
он займет всю высоту.
import SwiftUI
import PlaygroundSupport
struct TestView: View {
let text: String
var body: some View {
GeometryReader { reader in
Text(self.text)
}
}
}
struct ContentView: View {
var body: some View {
ZStack {
TestView(text: "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla")
.frame(width: 250)
.background(Color.red)
}
}
}
PlaygroundPage.current.setLiveView(ContentView())
Как я могу это обойти?
1 ответ
ПРЕДУПРЕЖДЕНИЕ ⚠️: Это когда читатель Geomtery не смог мне помочь с геометрией, и я начал биться головой о стену
Вот что вы можете сделать:
struct ContentView: View {
var text = "bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla"
var width : CGFloat = 250
var height: CGFloat {
var size : CGFloat
let chars = self.width / 14 // assuming width of 1 character is 14 which is the case by default for Text view
let lines = CGFloat(text.count) / chars
size = CGFloat(14 * (lines + 1))
return size
}
var body: some View {
ZStack {
TestView(text: text)
.frame(width: width, height: height)
.background(Color.red)
}
}
}
Установите высоту TestView вручную, используя высоту как вычисляемое свойство.
Справочная история о том, как я оценил высоту шрифта по умолчанию
Нажмите shift+ command+ 4 Используйте указатель и найдите разницу между относительными положениями y