Ответ 1
Проблема была вызвана тем, что свойство editable
было ложным в раскадровке. Я не знаю, почему это заставило шрифт оставаться неизменным - и только на iOS 6.
Я использую раскадровки для своего пользовательского интерфейса. Ранее я использовал XCode 4.6 и был выпущен на iOS 6. С тех пор я обновил iOS 7 с помощью XCode 5 и обновил раскадровку, чтобы хорошо работать с XCode 5. У меня есть одна проблема:
UITextView
не хочет отображать изменения шрифта внутри кода. Изменения цвета текста работают нормально. Любые другие изменения свойств в порядке. Шрифт, совсем нет. Я использовал пользовательский шрифт, поэтому я проверил разные шрифты разных размеров (т.е. systemFontOfSize:
), но это не сработало. В текстовом представлении отображается только тот шрифт, который установлен в раскадровке. Что мне здесь не хватает? Существуют ли какие-либо ограничения автоматической компоновки, которые воюют с такими вещами? У меня было несколько проблем с ограничениями во время миграции, но, как я уже сказал, шрифты отлично работают в iOS 7.
Я предполагаю, что что-то в раскадровке мне не хватает, как будто я создаю UIViewController
и добавляю текстовое представление в код, он отлично работает.
Я бы добавил код, но я не уверен, что он вообще поможет в этом случае.
Проблема была вызвана тем, что свойство editable
было ложным в раскадровке. Я не знаю, почему это заставило шрифт оставаться неизменным - и только на iOS 6.
Даже незнакомец, это происходит только на iPhone, а не на iPad.
Если вы устанавливаете шрифт в коде и не хотите редактируемого текстового представления, сделайте следующее:
textView.editable = YES;
textView.font = newFont;
textView.editable = NO;
В моем случае это вопрос "выбираемого" свойства UITextView.
Итак, я проверил свойство "selectable" в UITextView в редакторе раскадровки, чтобы установить его YES
а позже в viewWillAppear установите для этого свойства значение NO.
textview.text = @"some text";
textview.selectable = NO;
Для меня это работает, если вы задаете текст своего UITextView и после установки шрифта (то же самое для цвета):
_myTextView.text = @"text";
[_myTextView setFont:[UIFont fontWithName:@"Helvetica Neue" size:18.0f]];
_myTextView.textColor = [UIColor whiteColor];
Спасибо за ответы. Проблема все еще присутствует на iOS9. То, что я узнал, заключается в том, что когда вы устанавливаете " User Interaction Enabled = false" в Interface Builder, вы можете оставить Редактируемый и Выбираемый= true, и пользователь не сможет редактировать текстовое представление.
Итак, мое решение:
Код для быстрого:
textOutlet.editable = true
textOutlet.textColor = UIColor.whiteColor()
textOutlet.font = UIFont(name: "ArialMT", size: 20)
textOutlet.editable = false
Или, если вы сначала меняете текст, он волшебным образом решается
textOutlet.text = "omg lol wtf"
textOutlet.textColor = UIColor.whiteColor()
textOutlet.font = UIFont(name: "ArialMT", size: 20)
Я обнаружил, что размер шрифта игнорируется. Это было разрешено, установив флажок: Selectable (выбрав UITextView в раскадровке)
Эта проблема возникает только при установке свойства Selectable в FALSE в построителе интерфейса.
Если вам необходимо, чтобы свойства Editable и Selectable установлены в FALSE, сделайте это из CODE, а не в Interface Builder.
Подводя итоги, создайте редактируемые и выбираемые свойства = ДА в Конструкторе интерфейсов, а затем добавьте следующий код, если вам нужны свойства ЛОЖЬ:
_textView.editable = NO;
_textView.selectable = NO;
Надеюсь, что это поможет,
Модель Swift 3, которая работала для меня:
extension UITextView {
func setFontAndUpdate(_ font: UIFont?) {
self.font = font
// Font doesn't update without text change
let text = self.text
self.text = nil
self.text = text
}
}
В моем случае (разработка на Xcode 7.3, iOS 9),
Причиной был порядок установки текста и шрифта-семейства/размера, а не варианты редактируемого или выбираемого множества ответов. (и я не получаю никакой раскадровки, xib в этом Textview.)
Если я введу как
[myTextView setFont:[UIFont fontWithName:@"HelveticaNeue-Italic" size:20]];
myTextView.attributedText = mAttStr;
то семейство и размер шрифта не изменяются, но иначе когда я отменяю эти два шага, он работает. Настройка текста должна быть впереди установки семейства шрифтов/размера.
Как упоминалось другими:
textView.font = UIFont.systemFont(ofSize: 16)
textView.isEditable = false
p.s. не нужно сначала устанавливать isEditable
как true
, так как он true
по умолчанию: немного короче, немного приятнее