1

我想制作一个里面有文字的矩形。矩形应固定在显示器(或超级视图)的右侧和左侧。它的高度应该由文字决定。

我尝试了以下代码:

struct DescriptionView: View {

var description =
"""
02.11.2021
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Illud urgueam, non intellegere eum quid sibi dicendum sit, cum dolorem summum malum esse dixerit. Omnis enim est natura diligens sui. Quamquam haec quidem praeposita recte et reiecta dicere licebit. Duo Reges: constructio interrete. Idem iste, inquam, de voluptate quid sentit? Ergo instituto veterum, quo etiam Stoici utuntur, hinc capiamus exordium. Tum ille: Tu autem cum ipse tantum librorum habeas, quos hic tandem requiris? Bona autem corporis huic sunt, quod posterius posui, similiora..
Bild © Lorem Lipsum
"""

var body: some View {
    ZStack(alignment: .bottom) {
        Color.red
            .edgesIgnoringSafeArea(.all)

        Text(description)
            .foregroundColor(.white)
            .font(.headline)
            .background(
                Rectangle()
            )
            .edgesIgnoringSafeArea(.horizontal)
        
    }
}

}

结果如下所示: 在此处输入图像描述

如您所见,文本的左侧和右侧都有一些填充。我怎样才能摆脱这个?矩形应始终尽可能宽,而文本决定矩形的高度。

更新: 我使用的是 Xcode 版本 13.1 (13A1030d)。当我在 TabView 中嵌入 DescriptionView() 时,填充在 Xcode Preview 中消失了。但是,当我在模拟器中启动应用程序时,填充再次出现。

struct ContentView: View {
    var body: some View {
        ZStack {
            Color.black
                .edgesIgnoringSafeArea(.all)
            TabView {
                DescriptionView()
                DescriptionView()
                DescriptionView()
            }
            .tabViewStyle(PageTabViewStyle())
            .indexViewStyle(PageIndexViewStyle(backgroundDisplayMode: .interactive))
        }
    
    }
}

Xcode 预览:

在此处输入图像描述

模拟器:

在此处输入图像描述

更新 2: 作为建议的答案之一,我尝试了几何阅读器。我摆脱了填充,但现在对齐是错误的。另外我认为它不应该那么复杂(带有几何阅读器和堆栈):

var body: some View {
    ZStack(alignment: .bottom) {
        Color.red
            .edgesIgnoringSafeArea(.all)
        
        GeometryReader { geometry in
            VStack() {
                Text(description)
                    .foregroundColor(.white)
                    .font(.headline)
                    .frame(maxWidth: .infinity)
                    .background(
                        Color.black
                    )
            }
        }
        
    }
}

在此处输入图像描述

4

2 回答 2

1

您的Text视图正在使用最大宽度(在本例中为屏幕宽度)计算其大小,结果是width小于屏幕宽度,因为没有一行文本完全适合屏幕。

如果您希望Text视图完全展开,您应该使用frame修饰符:

var body: some View {
    ZStack(alignment: .bottom) {
        Color.red
            .edgesIgnoringSafeArea(.all)
        Text(description)
            .foregroundColor(.white)
            .font(.headline)
            .frame(maxWidth: .infinity, alignment: .leading)
            .background(
                Rectangle()
            )
    }
}
于 2021-11-15T12:49:04.063 回答
0

我不知道这是否适合您的需求,但这种方式可以回答。

struct ContentView: View {
    var body: some View {
        GeometryReader { geometry in
            VStack() {
                Text("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to mak")
                    .font(.title)
                    .background(Color.blue)
            }
        }
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}
于 2021-11-15T09:13:22.653 回答