gpt4 book ai didi

iPhone:将表格 View 单元格滚动到自定义键盘对齐工具栏上方可见?

转载 作者:太空狗 更新时间:2023-10-30 03:39:21 28 4
gpt4 key购买 nike

我一直在问a question在过去几天开发一个使自定义工具栏与 iPhone 键盘顶部对齐的应用程序的一两天。我正在使用 Josh 在 this question 中描述的方法;基本上,我让 View Controller 监听 UIKeyboardWillShowNotification 并根据需要添加工具栏。

View Controller 本身管理一个表格 View ,其单元格都包含一个 UITextField。显示的键盘和工具栏正在编辑这些文本字段。我仍然遇到的唯一问题是:当一个单元格的键盘和工具栏显示在表格的一半以上时,它会滚动到键盘上方可见,但不在工具栏上方 .

单元格和文本字段仍然是可编辑的,但大约一半的单元格隐藏在工具栏下方。如果我让工具栏消失(不要将它添加到通知响应程序中),整个单元格都会变得可见,但显然我失去了工具栏提供的功能。

有没有办法改变文本字段滚动到的位置?我试过使用 UITableView 方法 scrollToRowAtIndexPath:atScrollPosition:animated:,但在切换多个单元格时往往会产生奇怪的结果。

将表格 View 单元格滚动到自定义键盘工具栏上方可见位置的最佳方法是什么?

最佳答案

我完全按照您在我的应用中描述的方式进行操作。这是我使用的代码,逐字记录。它的动画效果非常好,而且看起来效果很好。

两个免责声明:

  1. 我将 parentView 作为自定义初始化的一部分传入。
  2. 这段代码不是我写的,我不会以此为荣。我从 Matt Gallagher 真正精彩的博客中得到它 Cocoa With Love .

static const CGFloat KEYBOARD_ANIMATION_DURATION = 0.3;
static const CGFloat MINIMUM_SCROLL_FRACTION = 0.2;
static const CGFloat MAXIMUM_SCROLL_FRACTION = 0.8;
// adjust this following value to account for the height of your toolbar, too
static const CGFloat PORTRAIT_KEYBOARD_HEIGHT = 216;


- (void)textFieldDidEndEditing:(UITextField *)textField
{
CGRect viewFrame = self.parentView.frame;
viewFrame.origin.y += animatedDistance;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

[self.parentView setFrame:viewFrame];

[UIView commitAnimations];
}

- (void) textFieldDidBeginEditing:(UITextField*) textField {
CGRect textFieldRect = [self.parentView.window convertRect:textField.bounds fromView:textField];
CGRect viewRect = [self.parentView.window convertRect:self.parentView.bounds fromView:self.parentView];
CGFloat midline = textFieldRect.origin.y + 0.5 * textFieldRect.size.height;
CGFloat numerator = midline - viewRect.origin.y - MINIMUM_SCROLL_FRACTION * viewRect.size.height;
CGFloat denominator = (MAXIMUM_SCROLL_FRACTION - MINIMUM_SCROLL_FRACTION) * viewRect.size.height;
CGFloat heightFraction = numerator / denominator;

if (heightFraction < 0.0) {
heightFraction = 0.0;
}else if (heightFraction > 1.0) {
heightFraction = 1.0;
}

animatedDistance = floor(PORTRAIT_KEYBOARD_HEIGHT * heightFraction);

CGRect viewFrame = self.parentView.frame;
viewFrame.origin.y -= animatedDistance;

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:KEYBOARD_ANIMATION_DURATION];

[self.parentView setFrame:viewFrame];

[UIView commitAnimations];
}

关于iPhone:将表格 View 单元格滚动到自定义键盘对齐工具栏上方可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1116669/

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