[英]Text garbled when using NSTextContainer/NSLayoutManager with UITextView
[英]iOS 7 Text Kit: When has NSLayoutManager filled its last NSTextContainer?
我將Text Kit與UIPageViewController結合使用來創建一本書。 原始文本存儲在文本文件(.html)中,並放置在NSTextStorage中。
[NSLayoutManager addTextContainer:(NSTextContaner *)txt]方法效果很好,但是沒有辦法知道NSLayoutManager何時填充了最后一個NSTextContainer-即使顯示所有下一個,它也只會返回NSTextContainer。 結果,完成NSLayoutManager后,您將獲得所有庫頁面。
我試過使用[NSLayoutManagerDelegate didCompleteLayoutForTextContainer:atEnd:]回調方法,但無法正常工作。 填充每個NSTextContainer之后,它不僅返回最后一個NSTextContainer填充時間,還返回atEnd標志= YES。 我設置了UITextView.scrollable = NO(在其他地方建議),但這沒有幫助。
我也嘗試通過在沒有文本顯示時調用UITextView.text來檢查文本,但是該方法始終返回位於NSTextContainer / NSLayoutManager后面的整個NSTextStorage的內容。
如果我不知道何時填充了最后一個容器,則不知道何時布置了所有頁面。 有沒有一種方法可以測試UITextView來查看其是否為空或NSContainer或NSLayoutManager來查看完成的文本布局?
我一直無法正確調用call方法-我認為這是一個錯誤-但我找到了一種檢查下一個容器是否為空的方法。
[_layoutManager addTextContainer:textContainer];
NSRange range = [_layoutManager glyphRangeForTextContainer:textContainer];
if (range.length == 0) {
return nil;// top adding container because this last one is empty
}
通過調用glyphRangeForTextContainer方法檢查容器是否為最后一個。 如果超過字形,則為最后一個容器。
layoutManager.addTextContainer(container)
let glyphRange = NSMaxRange((layoutManager.glyphRangeForTextContainer(container)))
if glyphRange >= layoutManager.numberOfGlyphs {
// last container
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.