【问题标题】:`maxHeight` behaves exactly as `height` frame modifier`maxHeight` 的行为与 `height` 帧修饰符完全相同
【发布时间】:2021-12-13 14:41:26
【问题描述】:

我对@9​​87654323@ 修饰符感到困惑。我希望生成的视图的动态高度上限为maxHeight。但是,视图的高度始终为maxHeight

在下面的示例中,我希望绿色矩形具有30px,而红色矩形应填充其余空间。但是,maxHeight 修饰符导致矩形之间有额外的填充。

还有其他方法可以实现我想要的吗? maxHeight 对我来说似乎没用。这与使用height 几乎相同,不是吗?

代码

var body: some View {
   VStack(spacing: 0) {
      Color.green
         .frame(height: 30)
         .frame(maxHeight: 60, alignment: .top)
            
      Color.red
   }
   .frame(height: 100)
   .background(Color.black)
}

预览:

【问题讨论】:

  • ...单词太多 - 进入答案。

标签: ios swiftui


【解决方案1】:

每个修饰符都可以(通常!)创建一个新视图。因此,您首先创建无限的绿色视图,然后将其限制为 30 像素(绿色填充了该空间),然后创建另一个 60 像素的视图(因为没有塞子,它填充了可用空间)......然后一切都用下面的红色视图(!)考虑了上面的视图。要获得您所期望的,只需删除 .frame(maxHeight - 这里不需要它。

...但是,如果您仍然希望(出于任何原因)保留它并满足期望,那么这是布局顺序的问题 - 优先考虑第二个视图,例如

    VStack(spacing: 0) {
        Color.green
            .frame(height: 30)
            .frame(maxHeight: 60, alignment: .top)

        Color.red
            .layoutPriority(1)   // << here !!
    }

你得到

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    • 2015-07-05
    • 2021-03-14
    • 2020-05-23
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多