gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:37:28 25 4
gpt4 key购买 nike

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

这是屏幕截图中描述的问题:

enter image description here

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

enter image description here

上图:用户点击最后一个单词 civiuda 之后的空格,弹出键盘, TextView 自动滚动到插入符号。这是意料之中的。

enter image description here

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

如果我从 TextView 的文本中删除换行符,问题就会消失。此外,如果我将换行符移到更靠近文本开头的位置(例如,在第一个单词 Lorem 之后),问题也会消失。

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

UITextView 在 IB 中使用 Autolayout 实例化。

enter image description here

代码如下:

#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];
}
}

关于插入换行符后 iOS 8 UITextView 滚动到插入符号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27435804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com