Добавив NSString к UIKit для рисования текста, вы можете заранее определить точное количество места, необходимое для визуализации данного текста для данного шрифта.Если вы разбиваете текст на страницы, вы можете использовать этот метод.
– sizeWithFont:constrainedToSize:lineBreakMode:
Предполагая, что режим шрифта и разрыва строки известен, создайте размер CGSize, имеющий ту же ширину, что и ваша страница, и используйте достаточное число для высоты,Это будет максимальный размер, на который мы ограничиваем текст.
CGSize maximumSize = CGSizeMake(pageWidth, 999999999);
CGSize expectedSize = [veryLongString sizeWithFont:theFont constrainedToSize:maximumSize lineBreakMode:theLineBreakMode];
expectedSize
сообщит нам размер, который будет принимать текст, если он будет расширяться вертикально бесконечно (очень близко к).Чтобы найти необходимое количество страниц, просто разделите общую высоту на высоту одной страницы.
NSInteger totalPages = ceil(expectedSize.height / heightOfOnePage);
Вы также можете настроить высоту одной страницы, чтобы последняя строка текста не изменялась.не обрезается.Чтобы это произошло, высота страницы должна быть кратна высоте строки шрифта.Скажем, начальная высота страницы равна 300px
, а высота шрифта равна 16px
, тогда будет некоторое ограничение, например 300/16 = 18.75
, которое не является целым числом.
NSInteger linesWithoutClipping = floor(initialPageHeight / theFont.lineHeight);
CGFloat optimalPageHeight = linesWithoutClipping * theFont.lineHeight;
Принимая значение пола18
и умножив его на высоту строки шрифта 16
, мы получим оптимальную высоту страницы 288
, чтобы избежать обрезки.
Обратите внимание, что lineHeight был представлен в iOS 4.0, но вы можете рассчитать егосами, если это необходимо для более старых версий.