首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI:在较小的设备上以某种方式调整VStack中的间隔

SwiftUI:在较小的设备上以某种方式调整VStack中的间隔
EN

Stack Overflow用户
提问于 2022-01-23 19:04:09
回答 1查看 625关注 0票数 2

我试图优化一个UI与VStacks和间隔在两者之间。该UI是理想的设计为iPhone 13专业屏幕大小(左)。对于较小的设备,其意图是间隔将以某种方式缩小,而UI看起来仍然很有吸引力。

我试图通过使用minHeightidealHeightmaxHeight的间隔框来实现这一点。预期的布局出现在iPhone 13 Pro上,但在iPhone SE这样的较小设备上,间隔器不会缩小到minWidth。我怎么才能解决呢?

代码语言:javascript
复制
import SwiftUI

struct ContentView: View {
    var body: some View {
        VStack(spacing: 0) {
            // Top Space
            Spacer()
                .frame(minHeight: 16, idealHeight: 32, maxHeight: .infinity)
                .fixedSize()
            
            // VStack 1
            VStack(spacing: 0) {
                // Image placeholder
                Rectangle()
                    .fill(Color.red)
                    .frame(height: 175)
                
                Spacer()
                    .frame(minHeight: 15, idealHeight: 62, maxHeight: .infinity)
                    .fixedSize()
                
                Text("Abc")
                    .frame(height: 100)
            }
            .background(Color.gray)
            
            // Middle Space
            Spacer()
                .frame(minHeight: 22, idealHeight: 100, maxHeight: .infinity)
                .fixedSize()
            
            // VStack 2
            VStack(spacing: 0) {
                // Image placeholder
                Rectangle()
                    .fill(Color.red)
                    .frame(height: 100)
                
                Spacer()
                    .frame(minHeight: 15, idealHeight: 35, maxHeight: .infinity)
                    .fixedSize()
                
                // Image placeholder
                Rectangle()
                    .fill(Color.red)
                    .frame(height: 195)
            }
            .background(Color.gray)
            
            // Bottom Space
            Spacer()
                .frame(minHeight: 16, idealHeight: 45, maxHeight: .infinity)
                .fixedSize()
        }
        .edgesIgnoringSafeArea(.all)
    }
}
EN

回答 1

Stack Overflow用户

发布于 2022-01-24 00:50:01

我建议将所有内容都封装在另一个VStack中,并使用它的间距。您可以读取视图init中的UIScreen边界,并将其与所有设备的边界进行比较。

代码语言:javascript
复制
struct SpacerTest: View {


var spacing: CGFloat

init() {
    let screenHeight = UIScreen.main.bounds.size.height
    
    if screenHeight < 500 {
        self.spacing = 20
    } else if screenHeight < 600 {
        self.spacing = 50
    } else {
        self.spacing = 100
    }
}

var body: some View {
    VStack(spacing: spacing) {
        Text("Spacing Test")
        Text("Spacing Test")
    }
}

}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70825600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档