为什么在SwiftUI中,LazyHStack占据整个高度而HStack不占据?

3
LazyHStack和HStack在高度方面的行为不同,原因是什么?(VStack同理)。
import SwiftUI

struct LazyTestView: View {

   var body: some View {

      LazyHStack {

         ForEach(1...10, id: \.self) { int in
            Text("\(int)")
         }

      }
   }
}

struct LazyTestView_Previews: PreviewProvider {

    static var previews: some View {
        LazyTestView()
            .previewLayout(.sizeThatFits)
    }
}

enter image description here

相反,使用 HStack:

import SwiftUI

struct LazyTestView: View {
   var body: some View {
      HStack {
         ForEach(1...10, id: \.self) { int in
            Text("\(int)")
         }
      }
   }
}

enter image description here

一种解决方案是为LazyHStack添加.fixedSize()... PS: Xcode版本12.5 beta (12E5220o)

从iOS 15开始,修饰符是.fixedSize()而不是_Sized_。 - erick2red
1个回答

8

一开始就是这样的。从LazyVStack开始,原因是Lazy Stacks不知道其承载的所有可能内容,因此采取更安全的方法来准备任何大小的内容;另一方面,普通的Stacks确切地知道它们的子级,因此它们采取适合实际需要的框架或大小,既不多也不少!


哦,那其实很有道理!在我的情况下,我认为我可以使用“普通”的HStack / VStack,因为我的列表中没有很多项目(最多10个)。感谢您的回答! - alpennec
你好,如果我知道数据量不大,我也会使用普通的Stack。但是,如果你要加载一些数据,而你不知道它有多大,那么一定要使用Lazy Stack,这在内存管理方面有显著的差异。不客气。 - ios coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接