如何使滚动窗格适应其内容?

时间:2016-01-11 13:17:17

标签: scrollview smalltalk squeak

我正在尝试显示Morph,可以在显示时增长和缩小。为了不冒Morph从窗口中生长出来的风险,我想把它放在ScrollPane中,这样如果它对于窗口来说太大就可以滚动它。举个例子:

rows := Morph new


layoutPolicy: TableLayout new;
    listDirection: #topToBottom;
    color: Color white.
sp := ScrollPane new
    extent: 100@100.
sp scroller addMorph: rows.

rows addMorphBack: (RectangleMorph new color: Color red).
rows addMorphBack: (RectangleMorph new color: Color blue).
sp openInWindow.
rows addMorphBack: (RectangleMorph new color: Color green).

我的问题是,在此示例中,绿色矩形不再适合窗口,但不显示滚动条。如果切换了最后两行代码,我会得到一个滚动条。

因此我的问题是:有没有办法让ScrollPane知道其卷轴中的Morph已经增加?

2 个答案:

答案 0 :(得分:4)

我的回答与aka.nice相同 但它并不总是显示正确的滚动条。 似乎

sp setScrollDeltas.

hideOrShowScrollBars相同而且更多一点。

答案 1 :(得分:1)

似乎只需向ScrollPane发送一条消息即可:

sp hideOrShowScrollBars.

我首先尝试通过变形来告知布局更改rows layoutChanged.但没有成功。

然后,为了发现这个技巧,我浏览了scroller消息的所有发件人(在文本窗格中选择滚动条并根据平台点击alt + n ctrl + n或cmd + n),以及所有访问权限scroller中的ScrollPane实例变量(使用alt + m浏览滚动条的实现者,然后选择ScrollPane中的inst var>>滚动方法并按alt / ctrl / cmd + shift + n,或者执行来自浏览器ScrollPane browse的相同内容,直到我发现可以发送合理的消息。