replaceWith() 方法的 sizeToScene 属性 剪切顶部并增加 window 的底部

replaceWith() method's sizeToScene property cuts top and increases bottom part of the window

我有 2 个视图:LoginScreen 和 MainScreen。我使用 replaceWith() 切换到主屏幕。他们都有相同的 prefHeightprefWidth。问题是,当我从 LoginScreen 转到 MainScreen 时,window 的底部突然变大了 30-40px。

这是我的代码:

loginScreen.replaceWith(mainScreen, sizeToScene = true, transition=metroAnimation)

然后我用 sizeToScene=false 尝试了它并且它起作用了,不再卡住......但是我注意到另一个问题,MainScreen 顶部的大约 30-40px 不见了:

sizeToScene=true 底部不断增长:

sizeToScene=false,底部不长,顶部被吃掉:

我该如何解决它,我做错了什么吗?

这是我的主屏幕:

class MainScreen : View("MainScreen") {

private val toolbarLayout: ToolbarLayout by inject()

override val root = borderpane {
    addClass(screen)
    top = toolbarLayout.root
    center = flowpane {
        vgap = 20.0
        hgap = 20.0
        paddingAll = 20
        for (i in 0..14) {
            add(MobileAppGridItemLayout(i))
        }
    }
}

}

这是我的ToolbarLayout

class ToolbarLayout : View() {
override val root = borderpane {
    addClass(PanelStyle.toolbar)
    paddingAll = 20

    left {
        hbox(20) {
            label("MainView") {
                addClass(PanelStyle.titleText)
                textFill = Color.WHITE
            }
        }
    }

    right {
        vbox {
            button("Logout") {
                addClass(toolbarButton)
            }
        }
    }
}}

这是 LoginScreen 和 MainScreen 中使用的默认屏幕高度和宽度的样式:

screen {
        prefHeight = 720.px
        prefWidth = 1280.px
}

已编辑: 我尝试 replaceWith() 没有动画,结果如下:

  1. sizeToScene=false 时,底部没有生长,顶部也没有被吃掉。
  2. sizeToScene=true时,底部变大。

我想我发现了问题,这是因为 flowpane 的项目超出了 window 的范围。我在scrollpane中添加了flawpane,问题就解决了。

override val root = borderpane {
    addClass(screen)
    top = toolbarLayout.root
    center = scrollpane {
        isFitToHeight = true
        isFitToWidth = true
        vbarPolicy = ScrollPane.ScrollBarPolicy.AS_NEEDED
        content = flowpane {
            vgap = 20.0
            hgap = 20.0
            padding = insets(20, 40, 20, 40)
            for (i in 0..15) {
                add(MobileAppGridItemLayout(i))
            }
        }
    }
}