iOS 8 UITextView
的自动滚动到插入符号行为优于iOS 7 UITextView
。但是,当文本视图的文本包含换行符(\n
)时,我仍然在滚动到插入符号行为中遇到问题。
以下是屏幕截图中描述的问题:
ABOVE:显示UITextView
的默认拉丁文字。请注意,我在单词laborum
后插入了换行符。文本是在代码中设置的。
ABOVE:用户在最后一个单词civiuda
后点击该空格,键盘弹出,文本视图自动滚动到插入符号。这是预料之中的。
ABOVE:用户点击键盘上的返回按钮,键盘后面的插入符号丢失。这是一个意想不到的问题。
如果我从文本视图的文本中删除换行符,问题就会消失。此外,如果我将换行符更接近文本的开头(例如,在第一个单词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'
s contentInset
。相同的滚动问题。
我在代码中实例化了UITextView
。相同的滚动问题。
有人建议,点击返回键可能会被系统错误解释为完成编辑键。我继续注册键盘隐藏通知。他们没有被召唤。
答案 0 :(得分:0)
试试这个:
#param mark - UITextViewDelegate
- (void)textViewDidChangeSelection:(UITextView *)textView
{
if (IOS8) {
[self.textView scrollRangeToVisible:self.textView.selectedRange];
}
}