gpt4 book ai didi

换行后 iOS 7.1 UITextView 仍未滚动到光标/插入符号

转载 作者:IT王子 更新时间:2023-10-29 07:56:09 27 4
gpt4 key购买 nike

自 iOS 7 起,当用户键入流向新行的文本时,UITextView 不会自动滚动到光标。这个问题在 SO 和其他地方都有详细记录。对我来说,这个问题在 iOS 7.1 中仍然存在。我做错了什么?

enter image description here

我安装了 Xcode 5.1 并针对 iOS 7.1。我正在使用自动布局。

下面是我如何将 TextView 的内容定位在键盘上方:

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

UIEdgeInsets contentInset = self.textView.contentInset;
contentInset.bottom = keyboardRect.size.height;
self.textView.contentInset = contentInset;
}

我尝试过的方法:我已经尝试过发布到 SO 的许多解决方案,因为它与 iOS 7 有关。我尝试过的所有解决方案都 似乎很适合显示属性字符串的 TextView 。在接下来的三个步骤中,我概述了 SO ( https://stackoverflow.com/a/19277383/1239263 ) 上投票最多的答案如何响应用户第一次点击返回键。

(1.) TextView 成为viewDidLoad中的第一响应者。滚动到光标所在 TextView 的底部。

enter image description here

(2.) 在输入单个字符之前,点击键盘上的返回键。插入符号消失在视线之外。

enter image description here

(3.) 然而,再次点击返回键似乎使情况正常化。 (注意:然而,删除后面的新行会使插入符再次消失)。

enter image description here

最佳答案

改进了 UITextView 子类的解决方案代码:

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define is_iOS7 SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")
#define is_iOS8 SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0")

@implementation MyTextView {
BOOL settingText;
}

- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTextViewDidChangeNotification:) name:UITextViewTextDidChangeNotification object:self];
}
return self;
}

- (void)scrollToCaretInTextView:(UITextView *)textView animated:(BOOL)animated {
CGRect rect = [textView caretRectForPosition:textView.selectedTextRange.end];
rect.size.height += textView.textContainerInset.bottom;
[textView scrollRectToVisible:rect animated:animated];
}

- (void)handleTextViewDidChangeNotification:(NSNotification *)notification {
if (notification.object == self && is_iOS7 && !is_iOS8 && !settingText) {
UITextView *textView = self;
if ([textView.text hasSuffix:@"\n"]) {
[CATransaction setCompletionBlock:^{
[self scrollToCaretInTextView:textView animated:NO];
}];
} else {
[self scrollToCaretInTextView:textView animated:NO];
}
}
}

- (void)setText:(NSString *)text {
settingText = YES;
[super setText:text];
settingText = NO;
}

请注意,当按下蓝牙键盘上的向下键时,它不起作用。

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

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