2

这是我的目标布局。

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())

在此处输入图像描述

但我也想使用GeometryReaderand 当我把它放在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())

在此处输入图像描述

我怎样才能解决这个问题?

4

1 回答 1

0

警告⚠️:这是几何阅读器无法帮助我学习几何的时候,我开始用头撞墙

以下是您可以执行的操作:

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 的高度。

截屏

关于我如何估计默认字体高度的背景故事

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

于 2020-02-14T17:21:32.217 回答