Я работал с этим несколько раз, например, для реализации программы для чтения электронных книг, где вы хотите, чтобы страницы текли вправо.
Код, который вы разместили, по сути корректен, но он медленный, потому что он должен перерисовывать все слово в слово, когда вы измеряете его размер (при условии, что ваша функция isContentFit () занимает большую часть вашего времени). Если вы хотите оптимизировать это, вы должны сделать приблизительное предположение о размере каждой буквы и получить оценку того, сколько ваших слов может уместиться на одной странице, прежде чем начать отображать и измерять. Вы также можете отложить рендеринг / измерение следующих страниц до тех пор, пока они не отобразятся.
Другая проблема также может заключаться в том, как вы разбиваете строку на слова, а затем объединяете их по очереди. Это также может быть медленным и длительным, если строка большая. Здесь также было бы полезно просто искать исходную строку и считать буквы и пробелы, а затем использовать нарезку строк, когда вы знаете, где разрезать строку на страницы.
Еще одно решение, в котором я успешно участвовал несколько раз, - это использование веб-просмотра и стилизация текста, чтобы он отображался в столбцах, например, с использованием стилей, как в следующем примере: https://www.w3schools.com/cssref/tryit.asp?filename=trycss3_column-width
Движок веб-рендеринга делает что-то похожее на ваш код, но невероятно быстро.
В iOS вы должны использовать свойство css -webkit-column-width (поскольку веб-просмотры в iOS по существу отображаются как в Safari) и установить -webkit-column-width в качестве ширины вашего веб-просмотра, а затем визуализировать весь текст в веб-просмотр. В результате вы будете видеть одну «страницу» за раз и сможете прокрутить вправо, чтобы увидеть следующую страницу.
Если вы хотите использовать контроллер страницы или какой-либо другой элемент управления прокруткой поверх этого, вы должны внедрить некоторую магию css / javascript, что непросто, я должен признать, но это может быть сделано.
Вот пример строки HTML для отображения в веб-представлении. Просто вставьте всю свою строку истории в div:
<html>
<head>
<style>
.multicolumn {
-webkit-column-width: 500px; /* set this to the width of your webview */
height: 300px; /* set this to the height of your webview */
overflow-x: scroll;
}
</style>
</head>
<body>
<div class="multicolumn">
Insert long long text here...
</div>
</body>
</html>