iOS 8的UITextView
自动滚动到插入符的行为比iOS 7的UITextView
更好。但是,当文本视图的文本包含换行符(\n
)时,我仍然看到滚动到插入符的行为存在问题。
以下是截图中描述的问题:
上图: 显示了UITextView
的默认拉丁文本。请注意,在单词laborum
之后插入了一个换行符。该文本在代码中设置。
上图: 用户点击最后一个单词civiuda
后的空格,键盘弹出,文本视图会自动滚动到插入符。这是预期的行为。
上图: 用户点击键盘上的返回按钮,插入符被键盘遮挡。这是一个意外的问题。
如果我从文本视图的文本中删除换行符,则问题消失。此外,如果我将换行符移到文本的开头附近(例如,在第一个单词Lorem
之后),问题也会消失。
我做错了什么吗?如果没有,有人可以提供一个解决方案吗?
UITextView
在IB中使用自动布局进行实例化。
以下是代码:
#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
。但是出现了相同的滚动问题。
有人建议说,点击返回键可能会被系统误解为完成编辑键。因此,我注册了键盘隐藏通知。但是它们没有被调用。