(更新:我目前没有处理这个问题,但我的回答可能已经过时了。为了尝试合并其他人提供的内容,我会回应他们提到的 minLines 和 maxLines 属性,例如
editor.setOptions({
maxLines: Infinity
});
显然,无穷大“不是一个好主意,因为即使对于非常大的文档,它也会禁用虚拟视口。” 所以选择一个限制可能会更好。
为了历史的缘故,旧的答案是:
您引用的帖子只是假设它是一种固定宽度的字体,您知道其字符高度,并且您知道文档中的行数。将其相乘,您将获得内容高度的像素数。建议是每次按下字符或发生剪切/粘贴(可能会添加或删除行)时,您使用 JavaScript 将这个具体的新大小应用到具有 CSS 样式的 DOM 中的项目。
(他们将滚动条的“宽度”投入到高度计算中,老实说,我不能告诉你这背后是否有理由。我会让其他人弄清楚这部分。)
无论如何...如果您启用了软包装,则跨越的渲染屏幕行数可能会超过文档中“实际”行数。所以使用起来editor.getSession().getScreenLength()
比editor.getSession().getDocument().getLength()
.
我将编辑器(位置:绝对)放在一个部分(位置:相对)内,它是该部分中唯一的项目。这段代码现在似乎对我有用,如果我了解更多信息,我会更新它......!
$(document).ready(function(){
var heightUpdateFunction = function() {
// http://stackoverflow.com/questions/11584061/
var newHeight =
editor.getSession().getScreenLength()
* editor.renderer.lineHeight
+ editor.renderer.scrollBar.getWidth();
$('#editor').height(newHeight.toString() + "px");
$('#editor-section').height(newHeight.toString() + "px");
// This call is required for the editor to fix all of
// its inner structure for adapting to a change in size
editor.resize();
};
// Set initial size to match initial content
heightUpdateFunction();
// Whenever a change happens inside the ACE editor, update
// the size again
editor.getSession().on('change', heightUpdateFunction);
}