繁体   English   中英

插入换行符后iOS 8 UITextView滚动到插入问题

[英]iOS 8 UITextView scroll-to-caret issue after inserting newline character

iOS 8 UITextView的自动滚动到插入符号行为优于iOS 7 UITextView 但是,当文本视图的文本包含换行符( \\n )时,我仍然看到滚动到插入符号行为的问题。

以下是截图中描述的问题:

在此输入图像描述

上图:显示UITextView的默认拉丁文字。 请注意,我在单词laborum之后插入了换行符。 文本是在代码中设置的。

在此输入图像描述

上图:用户在最后一个单词civiuda ,键盘弹出后单击该空格,文本视图自动滚动到插入符号。 这是预料之中的。

在此输入图像描述

上图:用户点击键盘上的返回按钮,键盘后面的插入符号丢失。 这是一个意想不到的问题。

如果我从文本视图的文本中删除换行符,问题就会消失。 此外,如果我将换行符移动到文本的开头(例如,在第一个单词Lorem ),问题也会消失。

难道我做错了什么? 如果没有,任何人都可以提供修复吗?

使用Autolayout在IB中实例化UITextView

在此输入图像描述

这是代码:

#import "ViewController.h"

@interface ViewController ()

@property (weak, nonatomic) IBOutlet UITextView *textView;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    // text contains a newline character after the word 'laborum'; removing the newline character eliminates the scrolling issue
    self.textView.text = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\nNam liber te conscient to factor tum poen legum odioque civiuda.";

    self.textView.font = [UIFont systemFontOfSize:26];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardDidShow:) name:UIKeyboardDidShowNotification object:nil];
}

- (void)keyboardDidShow:(NSNotification *)notification
{
    NSDictionary *info = [notification userInfo];
    CGRect keyboardRect = [[info objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    keyboardRect = [self.textView convertRect:keyboardRect fromView:nil];

    UIEdgeInsets insets = self.textView.contentInset;
    insets.bottom = keyboardRect.size.height;
    self.textView.contentInset = insets;
    self.textView.scrollIndicatorInsets = insets;

    // doesn't fix the scrolling issue
    [self.textView setNeedsLayout];
}

我尝试过的:

我尝试使用底部约束来推动键盘上方的文本内容,而不是使用UITextView'contentInset 相同的滚动问题。

我在代码中实例化了UITextView 相同的滚动问题。

有人建议,点击返回键可能被系统错误解释为完成编辑键。 我继续注册键盘隐藏通知。 他们没有被召唤。

尝试这个:

#param mark - UITextViewDelegate

- (void)textViewDidChangeSelection:(UITextView *)textView
{
    if (IOS8) {
        [self.textView scrollRangeToVisible:self.textView.selectedRange];
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM