SwiftUI列表行未调整大小以适合内容

时间:2020-01-17 13:27:50

标签: swift listview swiftui

我有一个列表视图,其中包括1)页眉视图,2)动态ForEach视图和3)页脚视图。我的问题是标题视图所在的第一行将无法调整大小以适合其内容。主视图的代码如下:

var body: some View {
    List {
        GeometryReader { geometry in
            self.headerView(size: geometry.size)
        }
        ForEach(self.user.posts, id: \.self) { post in
            Text(post.title)
        }
        Text("No more posts...")
            .font(.footnote)
    }
    .edgesIgnoringSafeArea(.all)
}

这是我要实现的观点:

mockup

这是我到目前为止所拥有的...:

actual hierarchy

如果有任何合并,则在列表之外的标题视图会显示正常,但是,这不是我要查找的视图。

谢谢。

P.S:为大图像表示歉意,我不确定如何使它们显示为缩略图...

2 个答案:

答案 0 :(得分:2)

使用GeometryReader很好,但是应该以正确的方式使用它!

import SwiftUI

struct ContentView: View {
    var body: some View {
        // to get the size of view, we are going to use the width later
        GeometryReader { p in
            List {

                GeometryReader { _p in
                    // put your image or whatever ...
                    // and set the frame width
                    Color.red.frame(width: p.size.width, alignment: .center)
                }
                // and finally fix the height !! to work as expected
                .frame(height: 100)

                Text("By by, World!")
            }
        }
    }
}

答案 1 :(得分:0)

我更愿意将Sections用于类似目的(各节允许使用不同的配置),例如

enter image description here

var body: some View {
    List {
        Section {
           // << header view is here with own size
        }
        .listRowInsets(EdgeInsets()) // << to zero padding

        Section { // << dynamic view is here with own settings
            ForEach(self.user.posts, id: \.self) { post in
                Text(post.title)
            }
        }
        Section { // footer view is here with own size
            Text("No more posts...")
               .font(.footnote)
        }
    }
    .edgesIgnoringSafeArea(.all)
}