【问题标题】:Spacing Issue with SwiftUISwiftUI 的间距问题
【发布时间】:2019-09-14 13:35:03
【问题描述】:

我遇到了一种奇怪的间距行为,希望有人能解释一下。我有两个视图,主视图 (ContentView) 包含一个名为 PlayerToolbar 的子视图。所需的行为是 ContentView 占据整个屏幕,而 PlayerToolbar 呈现在屏幕的最底部。 PlayerToolbar 包含图像按钮和间隔。我遇到的问题是 ContentView 只占用屏幕的一部分,并且 PlayerToolbar 未与底部对齐,如图所示。

这是 ContentView 的代码

struct ContentView: View {
    var body: some View {
        VStack{
            Spacer()
            Text("Main Content")
            Spacer()
            PlayerToolBar()
            }.background(Color.blue)
    }
}

这是 PlayerToolbar 的代码:

struct PlayerToolBar: View {

    var body: some View {   
        HStack{
            Spacer()
            Button(action: {
                print("backward button pressed")
            }){
                Image(systemName: "gobackward.10").renderingMode(.original) .resizable().aspectRatio(contentMode: .fit)
            }
            Spacer()

            Button(action: {
                print("play button pressed")
            }){
                Image(systemName: "play.circle").renderingMode(.original) .resizable().aspectRatio(contentMode: .fit)
            }
            Spacer()

            Button(action: {
                print("go forward button pressed")
            }){
                Image(systemName: "goforward.10").renderingMode(.original) .resizable().aspectRatio(contentMode: .fit)
            }
            Spacer()

            Button(action: {
                print("jot button pressed")
            }){
                Image(systemName: "pencil.circle").renderingMode(.original) .resizable().aspectRatio(contentMode: .fit)
            }
            Spacer()
        }.background(Color(UIColor.secondarySystemBackground))
    }
}

我发现如果在我的 PlayerToolbar 中的第一个 Spacer 和 Button 之间添加一个 Text 对象,屏幕将按预期呈现

...
            Spacer()
            Text(" ")
            Button(action: {
                print("backward button pressed")
            }){
                Image(systemName: "gobackward.10").renderingMode(.original) .resizable().aspectRatio(contentMode: .fit)
            }
...

知道为什么它的行为方式以及为什么 Text 让它按照我喜欢的方式运行吗?

【问题讨论】:

  • 快速思考?我看不出你在哪里用ZStack 尝试过任何东西。这样的事情对你有什么好处?记住 - 嵌套堆栈...一个“Z”,三个“V”,每个都有两个“H”still应该意味着层次结构中的单个视图。

标签: swiftui


【解决方案1】:

我认为,问题在于您的 PlayerToolbar 没有高度,布局逻辑很难确定高度。 PlayerToolbar 中的任何内容都没有明确的高度。您的图像已调整大小,但您的视图中没有任何内容说明如何调整它们的大小。

通过添加 Text() 视图,您的图像现在可以匹配一些高度,因此它可以按您的预期工作。

打破歧义的其他解决方案是(选择任何一个,而不是全部):

  1. 为 PlayerToolbar 设置框架高度:
    PlayerToolBar().frame(height: 40)
  1. 为至少一张图片设置高度:
    Image(systemName: "gobackward.10")
       .renderingMode(.original)
       .resizable()
       .frame(height: 40)
       .aspectRatio(contentMode: .fit)
  1. 将高度设置为您的按钮之一:
    Button(action: {
        print("backward button pressed")
    }){
        Image(systemName: "gobackward.10")
            .renderingMode(.original)
            .resizable()
            .aspectRatio(contentMode: .fit)
   }.frame(height: 40)
  1. 在 PlayerToolbar 中设置 HStack 的高度。

  2. 至少删除一张图片中的 resizable() 修饰符。

Image(systemName: "pencil.circle").renderingMode(.original).aspectRatio(contentMode: .fit)

所有这些替代方案都针对同一件事,确保您的图片知道要扩大/缩小多少。当然还有很多其他的选择。这些只是其中的一部分。

【讨论】:

  • 非常感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
相关资源
最近更新 更多