Layout 具有框架最大高度和.infinity的SwiftUI视图布局

Layout 具有框架最大高度和.infinity的SwiftUI视图布局,layout,frame,swiftui,Layout,Frame,Swiftui,如何以这种方式在SwiftUI中布局视图 我有要拉伸以填充可用空间的输入字段 这些输入被放置在VStack中,这样我就给它们frame(高度:40) 此VStack位于具有框架的白色框内(最大高度:geometry.size.height*0.8) 最后一个白框并没有根据VStack中的输入数量进行调整,而是占用0.8个空间,然后这些输入被分散在VStack中(添加的间隔大于所需) 我不明白为什么会发生这样的事情 FormView() .frame( maxWidth:

如何以这种方式在SwiftUI中布局视图

  • 我有要拉伸以填充可用空间的输入字段
  • 这些输入被放置在VStack中,这样我就给它们
    frame(高度:40)
  • VStack位于具有
    框架的白色框内(最大高度:geometry.size.height*0.8)
  • 最后一个白框并没有根据VStack中的输入数量进行调整,而是占用0.8个空间,然后这些输入被分散在VStack中(添加的间隔大于所需)

    我不明白为什么会发生这样的事情

    FormView()
         .frame(
           maxWidth: geometry.size.width * 0.85,
            maxHeight: geometry.size.height*0.85
    )
    
    表单视图包含:

     VStack(spacing: 4) {
                FormInput(label: "First Name", input: self.$firstName) {
                    isEditing in
    
                    self.avoider.editingField = 0
                }
                .frame(height: 40)
                .padding(0)
                .avoidKeyboard(tag: 0)
    

    我发现了为什么有时视图(布局)不会折叠以占用尽可能小的空间,而是扩展到maxHeigh/maxWidth

    它发生在我们使用

    GeometryReader { geometry in
    
        VStack { ... }
    
    }
    

    然后这些视图不会折叠并扩展到maxHeight。我在内部使用了这个GeometryReader
    。避免键盘(标记:0)

    我没有得到您想要的和您拥有的。我找到了它。通常我在中间有白色矩形FormView(设置为屏幕高度的最大85%)然后我有一个输入字段,据说是40磅高(它们在VStack内),输入的框架maxWidth/maxHeight设置为.infinity。它就是这样工作的。avoidKeyboard修饰符设置了.preference()并使用GeometryReader使这个布局被破坏。我只改变了框架()和avoidKeybaord()的顺序修改器,它又开始工作了!