UITextView с настраиваемым шрифтом не работает, когда текст установлен на "атрибут",
У меня есть UITextView
с некоторым текстом, который поступает из .rtf(вставлен непосредственно на Xcode)
Контекст содержит только один пользовательский шрифт (Futura Book BT 11.0)
Если я устанавливаю свойство "text (attribated)" равным "plain" = Пользовательский шрифт отображается правильно из раскадровки и из приложения
Если я установил свойство "text" в "attributed" =. Пользовательский шрифт отображается правильно из раскадровки, но не из приложения.
Как моя цель состояла в том, чтобы иметь текст с несколькими работающими шрифтами, как заставить атрибутное свойство работать с пользовательскими шрифтами? (Swift)
Спасибо!
Ответы
Ответ 1
Пользовательский шрифт отображается правильно из раскадровки, но не из приложения.
Приложение не отображает шрифт вообще или восстанавливает системный шрифт? Если он вернется к Helvetica, похоже, что это может быть известная ошибка в iOS 8.1
http://openradar.appspot.com/radar?id=5117089870249984
Возможное решение:
Вы тестировали его на тренажере и устройстве? Возможно, это просто не работает на симуляторе, а это значит, что вы можете исправить это, установив шрифт в вашей системе.
Ответ 2
Что я делаю:
private var _mutableString: NSMutableAttributedString!
if !isTitle {
var titleFont: UIFont = UIFont(name: StyleGlobals.TitleFontName, size: StyleGlobals.TitleFontSize)!
self._mutableString.addAttribute(NSFontAttributeName, value: titleFont, range: NSMakeRange(0, count(self._mutableString.string)))
self._mutableString.addAttribute(NSForegroundColorAttributeName, value: StyleGlobals.FontColor, range: NSMakeRange(0, count(self._mutableString.string)))
}
self.Label.attributedText = self._mutableString
Это касается как нового цвета шрифта, так и самого шрифта. У меня есть определенный UILabel, который должен содержать различные шрифты. Это может быть название или субтитр. Поэтому мне пришлось применить шрифт, когда я определил, что будет содержать ярлык.
Ответ 3
Вы уверены, что "Futura Book BT" правильно добавлен как пользовательский шрифт в ваше приложение?
Ответ 4
В моем случае проблема заключалась в том, что у меня не было установленного шрифта в моей системе, поэтому я сделал это с помощью Font Book.
Затем шрифт появился в списке в атрибутных текстовых меток.
EDIT: Теперь у меня возникли проблемы с отображением текущего текста и сделал это (я использую UILabel, не тестируемый в UITextView):
Мое решение - создать атрибутную строку из html (увидели это расширение где-то здесь в SO):
extension String {
var html2AttStr: NSAttributedString? {
guard let data = dataUsingEncoding(NSUTF8StringEncoding) else { return nil }
do {
return try NSAttributedString(data: data,
options: [
NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,
NSCharacterEncodingDocumentAttribute: NSUTF8StringEncoding],
documentAttributes: nil)
} catch let error as NSError {
//print(error.code)
return nil
}
}
}
И тогда я делаю что-то вроде:
let htmlStyle = "<meta charset=\"UTF-8\"><style> body { font-family: 'SourceSansPro-Light'; font-size: 18px; text-align: center; } b {font-family: 'SourceSansPro-Light'; }</style>"
let myString = "<font size=\"+2\">Slightly bigger font</font><br><br>Some message with normal text <b>a bold text</b> and some more text"
var attributedString = htmlStyle
attributedString.appendContentsOf(myString)
informationLabel.attributedText = attributedString.html2AttStr
Одно из преимуществ этого заключается в том, что теперь я могу поместить некоторый текст "% s" внутри строки для разбора слова/числа/и т.д. и Это легче перевести и разобрать. С форматированным текстом мне пришлось собрать кучу кода для поиска текста, применяя формат, не касаясь чего-либо вокруг. Это очень хорошо для меня:)
Ответ 5
Пожалуйста, позвоните ко всему вашему коду в методе viewDidLoadSubviews!
Чем работает.
У меня много проблем при изменении размера шрифта, стиля я viewDidLoad или методов viewWillApperar.
Итак, просто переместите свой код в метод viewDidLoadSubviews. Вы можете использовать флаг для изменения шрифтов только один раз, так как этот метод можно вызвать много раз:]
Ответ 6
Существует обходное решение. Просто дважды щелкните файл шрифта (в Finder) и установите его в систему.
Ответ 7
Создание UITextview "выбирается" из раскадровки будет работать.
Ответ 8
У меня возникла та же проблема, когда я использовал несколько пользовательских шрифтов в атрибуте UILabel. Раскадровка показывает правильный результат, но устройство не работает!!
Что я узнал, если размер шрифта отличается от текста с разными пользовательскими шрифтами. Он отлично работает!!
Итак, теперь я использую размер шрифта с незначительной разницей. Например, если 14, я использовал 14.01 для другого. Его невозможно сделать внутри раскадровки, поэтому я открыл раскадровку в качестве исходного кода и вручную установил размер шрифта, например:
<attributedString key="attributedTitle">
<fragment content="Do not have account? ">
<attributes>
<color key="NSColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<font key="NSFont" size="14" name="Roboto-Light"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
<fragment content="Login">
<attributes>
<color key="NSColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="calibratedRGB"/>
<font key="NSFont" size="14.01" name="Roboto-Bold"/>
<paragraphStyle key="NSParagraphStyle" alignment="center" lineBreakMode="wordWrapping" baseWritingDirection="natural" tighteningFactorForTruncation="0.0"/>
</attributes>
</fragment>
<attributedString key="attributedTitle">
Но все же я не могу найти, почему это происходит!