У меня есть текст, который должен отображаться в моем приложении. Текст содержит ссылки, которые должны быть интерактивными. Я пробовал несколько решений для создания вставляемых ссылок в UITextViews
и UILabels
.
UITextView
ссылки
UITextView
предоставляет детекторы данных, которые распознают URL-адреса и делают их доступными.
- Не подходит для меня, потому что ссылка открывается только в Safari, нет способа взять контроль над собой и делать со мной то, что я хочу.
UILabel
ссылок с использованием «Необычных ярлыков» (http://furbo.org/2008/10/07/fancy-uilabels/)
- Почти идеальное решение, обеспечивающее обнаружение ссылок и возможность для пользователя видеть их и постукивать по ним, и дает мне полный контроль над тем, что делать со ссылкой, когда она нажата.
- В настоящее время неприменимо, потому что реализация использует
UIButton
s для наложения ссылок, и они не переносят текст на длинные ссылки.
Наконец-то я остановился на использовании веб-просмотра. Я передаю текст в веб-просмотр и создаю вокруг него базовую HTML-оболочку, и все становится просто так. Это тот же подход, который использует Twitter для iPhone (он же Tweetie).
Единственная проблема, с которой я столкнулся сейчас, заключается в том, что если текст слишком длинный, веб-просмотр обрезает переполнение и прокручивает его для просмотра обрезанного текста.
Во-вторых, если текст слишком короткий, то под веб-обзором появляется большая область потерянного пространства.
В отличие от Tweetie, у меня есть больше контента под веб-обзором, и я хочу избежать переполнения прокрутки или потраченного впустую пространства. В любом случае веб-представление является подпредставлением прокрутки, поэтому содержимое всей страницы может увеличиваться без необходимости прокрутки ее подпредставлений.
Можно ли каким-либо образом динамически изменить размер веб-просмотра, чтобы оно соответствовало нужной высоте в зависимости от его содержимого?
До сих пор я много чего пробовал, похоже, что нет надежного решения:
sizeToFit
ничего не делает (или, скорее, просто устанавливает размер, равный текущему кадру в любом случае).
sizeThatFits:
возвращает его текущий размер в любом случае.
NSString
sizeWithFont:constrainedToSize:
неосуществимо, потому что UIWebView
и UIFont
имеют разные представления о размере 18.
- Просто чтобы уточнить этот момент. В моем тестировании я обнаружил, что webView с scaleFactor 1.0 и
scalesPageToFit
, установленным на NO
и размером шрифта для всей страницы, установленным на 13.5pt (в CSS), отображает текст, который имеет такой же размер, что и UILabel
с размером UIFont
размера 18. Если кто-нибудь сможет мне это объяснить, я буду благодарен.
- Кроме того, в webView я использую свойство CSS
word-wrap: break-word;
, чтобы предотвратить горизонтальную прокрутку webView с длинными словами или URL-адресами. Из-за этого поведение оборачивания между webView и UILineBreakModeWordWrap
полностью отличается. Даже использование UILineBreakModeCharacterWrap
не дает таких же результатов.
Либо нет способа сделать это, либо я тупой и упускаю что-то простое. Если бы кто-нибудь мог дать какое-то понимание, я был бы очень благодарен. Спасибо.