Уловка, вместо использования ui::Scrollview
, использовать ui::ListView
только с одним элементом внутри, ui::Text
. Это позволяет прокручивать и динамически изменять размер контейнера, когда вы меняете текстовое содержимое ui::Text
.
Ключ а) установка ширины ui::Text
таких же размера, как его родитель ui::ListView
и высоту до 0 и б) вызов my_listview->requestDoLayout()
на список следует в любое время изменения содержания текста, так что прокручивать область отражает это.
Вот пример того, как вы бы реализовать большой объем текста скроллинга в меньший ui::Panel
:
ui::ListView* listview = ListView::create();
my_scene->addChild(listview);
listview->setContentSize({300, 500}); //give it whatever size
ui::Text* text = ui::Text::create("[multiline content]", "fontName.ttf", 16);
text->setTextAreaSize({300, 0}); //use that same size, but use 0 height. This auto sets overflow and wrap in the backend
listview->addChild(text);
listview->requestDoLayout(); //this triggers resizing the listview to accommodate the
//string content. Needs to happen each time you
//text->setString(new_content) too.