我发现我需要一个元素来包含一些不是固定大小的文本(采取的操作日志),其中该元素具有固定大小。做出明显的事情会产生不良后果:
http://ikeran.org/images/overflow2.png
我正在使用的代码:
renderLog w h log =
let rh = truncate ((toFloat h) * 0.2)
contents = map (\m -> Text.text <| Text.height 12 <| Text.toText m) log
d = flow down contents in
size w rh d
我希望“大小”调用可以切断那个大小的内容。它没有。如果您对HTML非常熟悉,那就不足为奇了 - 默认overflow
为visible
。
如果我使用的是CSS,我只需将overflow
设置为hidden
或scroll
,然后继续我的快乐方式。有没有推荐的方法来实现这个与榆树?
答案 0 :(得分:1)
我所知道的唯一方法是相当低级别。您可以做的是将这些文本行放入日志中,直到用完您想要使用的空间。 I got this idea from the mailing list。
renderLog w h log =
let contents = map (\m -> width w <| Text.text <| Text.height 12 <| Text.toText m) log
heights = filter (\n -> n <= h) <| scanl1 (+) <| map heightOf contents
d = flow down <| take (length heights) contents
in height h d
你所做的是强迫每一段文字都是正确的宽度。这可以确保当您测量高度时,它将是日志中的高度
然后,您测量每个高度,并找出高度总和何时变得大于给定参数h
。仅将文本项目置于何时发生将确保您的日志不会溢出。
以下是一个正在运行的示例:http://share-elm.com/sprout/52da7873e4b06194fd2d4149