Курсор UITextView не правильно позиционируется при редактировании в iOS 7. Почему?
![Why is this a thing thats happening]()
Этот желтый квадрат выше - редактируемый UITextView, который в настоящее время редактируется (является первым ответчиком). Но вы, вероятно, не могли сказать правильно? Потому что курсора нет. Но есть... Это маленькая голубая точка в левом нижнем углу желтого textView. Он немного ниже нижней границы textViews. Поэтому, если я продолжу переход на новую строку или нажатие на ввод, текст будет двигаться вверх, как и следовало ожидать. Но курсор никогда не является "уровнем" или прямо над нижней границей UITextView. Он всегда чуть-чуть вываливается из нижней части, на пару точек ниже границы.
Почему? Это не проблема в iOS 6. Любой способ исправить это?
Ответы
Ответ 1
эта ошибка находится в iOS 7.0, вы можете решить эту проблему, изменив метод делегата textView.
попробуйте под кодом
- (void)textViewDidChange:(UITextView *)textView {
CGRect line = [textView caretRectForPosition:
textView.selectedTextRange.start];
CGFloat overflow = line.origin.y + line.size.height
- ( textView.contentOffset.y + textView.bounds.size.height
- textView.contentInset.bottom - textView.contentInset.top );
if ( overflow > 0 ) {
// We are at the bottom of the visible text and introduced a line feed, scroll down (iOS 7 does not do it)
// Scroll caret to visible area
CGPoint offset = textView.contentOffset;
offset.y += overflow + 7; // leave 7 pixels margin
// Cannot animate with setContentOffset:animated: or caret will not appear
[UIView animateWithDuration:.2 animations:^{
[textView setContentOffset:offset];
}];
}
}
ваша проблема будет решена.
Ответ 2
Если вы находитесь в сценарии контроллера навигации, я думаю, что это на самом деле результат свойства, введенного в iOS 7: automaticallyAdjustsScrollViewInsets
(см. Руководство по переходу iOS 7)
По умолчанию используется значение YES, и он попытается получить умение с помощью UITextView (который сам представляет собой прокрутку), отрегулировав смещение прокрутки для высоты навигационного контроллера.
Таким образом, решение должно установить это свойство как НЕТ в вашем viewDidLoad
(стараясь не вызывать его на iOS 6, поскольку он доступен только с iOS 7).
Ответ 3
Основываясь на ответе, который дал Тодд, вы можете добавить что-то вроде этого в методе, который запускается при завершении запуска приложения:
[[UITextView appearance] setTintColor:[UIColor redColor]];
[[UITextField appearance] setTintColor:[UIColor redColor]];
Это повлияет на все UITextFields и UITextViews.
Ответ 4
- (BOOL) textView:(UITextView *)sender shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text {
NSString * newText = [sender.text stringByReplacingCharactersInRange:range withString:text];
[self setFramesForText:newText];
if (!IOS_VERSION_6_OR_LESS) {
if ([text isEqualToString:@"\n"]){
[textView setContentOffset:CGPointMake(textView.contentOffset.x, 999999999)];
}
}
return YES;
}
Ответ 5
Вам просто нужно установить tintColor UITextView.
Поместите в код что-то вроде следующего в коде (я положил его в viewDidLoad).
self.textView.tintColor = [UIColor redColor];