【发布时间】:2021-09-29 06:19:04
【问题描述】:
给定一个 Composite 和 3 个嵌套的 VerticalLayouts,每个都有全高
还有一个Scroller 嵌套在最里面的VerticalLayout,Scroller 包含第四个 VerticalLayout 和 20 个 Buttons
Composite 被渲染时
然后我希望最外面的VerticalLayout 在屏幕上完全可见VerticalLayouts 和滚动条嵌套整齐Scroller 与所需一样小,因此所有内容都适合屏幕
并且根本不可能滚动外部的VerticalLayouts(只要屏幕足够大,可以容纳4个VerticalLayouts、一个Scroller,以及至少一个Button
但是最外面的VerticalLayout 不适合屏幕Scroller 允许滚动浏览 Buttons,但最后一个 Button 只有在滚动 3 个外部 VerticalLayouts 时才能看到(这不应该发生)。
滚动 3 个外部 VerticalLayouts 会显示外部 VerticalLayouts 的奇怪重叠。
初始状态
将Scroller滚动到底部后
将整个画布滚动到底部后
如何实现所需的嵌套/滚动行为?
这是我的代码
@Route("3_scrollerx")
public class ScrollerxView extends Composite<Component> {
@Override
protected Component initContent() {
final VerticalLayout lvl1 = new VerticalLayout(new Label("lvl1"));
final VerticalLayout lvl2 = new VerticalLayout(new Label("lvl2"));
final VerticalLayout lvl3 = new VerticalLayout(new Label("lvl3"));
final Scroller scroller = new Scroller();
scroller.setContent(buildScrollerContent());
scroller.setHeightFull();
List.of(lvl1, lvl2, lvl3).forEach(layout -> {
layout.setHeightFull();
layout.getStyle().set("border", "1px solid");
});
scroller.getStyle().set("border", "1px solid");
lvl1.add(lvl2);
lvl2.add(lvl3);
lvl3.add(scroller); // always weird
return lvl1;
}
private VerticalLayout buildScrollerContent() {
final var scrollerContent = new VerticalLayout();
for (int i = 1; i <= 20; i++) {
scrollerContent.add(new Button("Button " + i));
}
scrollerContent.setHeightFull();
return scrollerContent;
}
}
【问题讨论】:
-
布局内的标签也保留了一些空间。尝试扩展嵌套布局,而不是 setHeightFull,以便它们只占用剩余空间,而不是父高度的 100%。
-
一定有一个误解:我假设
setHeightFull(相当于setHeight("100%"))总是相对于周围的布局。那是错的吗?此外,如果我使用Button和setHeightFull()而不是Scroller,它会按预期工作。
标签: vaadin vaadin-flow