首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SwiftUI GeometryReader紧凑型尺寸

SwiftUI GeometryReader紧凑型尺寸
EN

Stack Overflow用户
提问于 2020-04-19 14:34:24
回答 2查看 544关注 0票数 2

我希望我的LoadingTitle有70%的屏幕宽度,所以我使用GeometryReader,但它使垂直尺寸扩大,我的LoadingTitle占用更多的垂直空间。我希望它尽可能地保持紧凑。

当使用硬编码的width: 300时,我得到了正确的布局(除了相对宽度):

代码语言:javascript
复制
struct ContentView: View {
    var body: some View {
        VStack(alignment: .leading, spacing: 0) {
            LoadingTitle()
            Color.blue
        }
    }
}

struct LoadingTitle: View {
    var body: some View {
        HStack() {
                Color.gray
            }
            .frame(width: 300, height: 22)
            .padding(.vertical, 20)
            .border(Color.gray, width: 1)
    }
}

现在,如果我将LoadingTitlebody包装在GeometryReader中,我可以获得正确的相对大小,但是GeometryReader会垂直展开我的视图:

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

    var body: some View {
        GeometryReader { geo in
            HStack() {
                Color.gray
                    .frame(width: geo.size.width * 0.7, height: 22, alignment: .leading)
                Spacer()
            }
            .padding(.vertical, 20)
            .border(Color.gray, width: 1)
        }
    }
}

我尝试以other suggested的身份在GeometryReader上使用.fixedSize(horizontal: false, vertical: true),但随后得到的视图过于紧凑,并且忽略了它的所有填充:

如何实现相对宽度的第一张截图的布局?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-19 15:21:08

这是一种可行的方法。使用Xcode11.4/ iOS 13.4 (不带ContentView )测试

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

    var body: some View {
        VStack { Color.clear }
            .frame(height: 22).frame(maxWidth: .infinity)
            .padding(.vertical, 20)
            .overlay(
                GeometryReader { geo in
                    HStack {
                        HStack {
                            Color.gray
                                .frame(width: geo.size.width * 0.7, height: 22)
                        }
                        .padding(.vertical, 20)
                        .border(Color.gray, width: 1)
                        Spacer()
                    }
                }
            )
    }
}
票数 2
EN

Stack Overflow用户

发布于 2021-09-20 08:58:32

由于您有固定的标题高度,

代码语言:javascript
复制
struct LoadingTitle1: View {
    var body: some View {
        GeometryReader { geo in
            HStack {
                Color.gray.frame(width: geo.size.width * 0.7)
                .padding(.vertical, 20)
                .border(Color.gray, width: 1)
                
                Spacer()
            }
        }.frame(height: 62)
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61300465

复制
相关文章

相似问题

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