Подтвердить что ты не робот

Курсор UITextView не правильно позиционируется при редактировании в iOS 7. Почему?

Why is this a thing thats happening

Этот желтый квадрат выше - редактируемый UITextView, который в настоящее время редактируется (является первым ответчиком). Но вы, вероятно, не могли сказать правильно? Потому что курсора нет. Но есть... Это маленькая голубая точка в левом нижнем углу желтого textView. Он немного ниже нижней границы textViews. Поэтому, если я продолжу переход на новую строку или нажатие на ввод, текст будет двигаться вверх, как и следовало ожидать. Но курсор никогда не является "уровнем" или прямо над нижней границей UITextView. Он всегда чуть-чуть вываливается из нижней части, на пару точек ниже границы.

Почему? Это не проблема в iOS 6. Любой способ исправить это?

4b9b3361

Ответ 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];