如何在不填充View的情况下使用GeometryReader

时间:2020-02-14 14:10:29

标签: layout swiftui geometryreader

这是我想要的布局。

GeometryReader

enter image description here

但是我也想使用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()) 内时,它将占据整个高度。

declare module 'nodemailer-html-to-text' {
  import * as Mail from 'nodemailer/lib/mailer'
  export function htmlToText(): Mail.PluginFunction
}

enter image description here

我该如何解决?

1 个答案:

答案 0 :(得分:0)

警告⚠️:这是当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)
        }
    }
}

通过使用height作为计算属性来手动设置TestView的高度。

screenshot

有关如何估算默认字体高度的背景故事

shift + 命令 + 4 使用指针找到相对y位置之间的差异