I'm currently trying to read in a RSS feed and separate the long paragraphed text into a UIScrollView with paging enabled. I need to separate the text into different pages aka fit what will fit on each page and separate the string as such. I'm not sure if there is a standard what of doing this and I assume that this is how most RSS reading apps separate their information on multiple pages. Does anyone know how to tackle this? I did not want to look letter by letter until the text didn't fit and continue.
edit:
This is a good start, but the example code pretty much runs into the problems I was trying to avoid and don't know how to get around. This range calculates incorrectly for the UITextView. I change the font and such as seen below. Everything is attempting to being calculated within - (NSRange)visibleRangeOfTextView:(UITextView *)textView. This method is called by -(void)adjustTextDisplay which is called by an external class after setting the text for the UITextView. I have no idea why setting the content size to the frame size of the screen does not restrict the view (as shown below) nor do I know why this method is returning the full string length as the range.
As of iOS 7, there's a much more elegant solution to this using TextKit that I've included in sample code below. The idea is to let TextKit's layout manager handle separating the glyphs and lay everything out that way properly. This prevents cutting off words mid way and a ton of flexibility:
Instead of heavy iterated calculations, I'd set complete (starting from the previous page end of course) text to the textView and get the last displayed character position. Then it is easy to perform a fast backward search to truncate the word/sentence.
I've got the following solution, a little tricky part of skipping the last partially displayed line in order to avoid scrolling and make it look nicer. You still need to move
endCutIndex
to make it word- or sentence-wrapping.The base project with the pager but not text-views is taken from here
Here's a bit of the .h file: