1

我正在使用TPKeyboardAvodingScrollView课程来确保键盘永远不会弹出UITextField. 然而,当我点击UITextField文本字段上升但太高时,iPhone 上有一些奇怪的错误:

在此处输入图像描述

在 GitHub 链接上,注释是这样说的:

笔记

这些类当前调整 contentInset 参数以避免内容在键盘下方移动。这样做,而不是调整框架,是为了解决一个 iOS 错误,该错误会导致在稳定下来之前视图向上跳跃的抖动动画。为了促进这种变通方法,contentSize 至少保持与视图框架的大小相同。

也许与此有关,我只是不确定如何解决此问题。

我已经尝试更改此行:

[self setContentOffset:CGPointMake(self.contentOffset.x, 
                                   [self idealOffsetForView:firstResponder withSpace:[self keyboardRect].origin.y - self.bounds.origin.y])

与(添加+100):

[self setContentOffset:CGPointMake(self.contentOffset.x, 
                                   [self idealOffsetForView:firstResponder withSpace:[self keyboardRect].origin.y - self.bounds.origin.y+100])

但这不是一个好方法,因为这在 iPad 上不起作用。

4

1 回答 1

1

最近遇到了同样的问题。对我来说,解决方案是修改 -(CGFloat)idealOffsetForView:(UIView *)view withSpace:(CGFloat)space 方法。这是它在我的项目中的外观:

-(CGFloat)idealOffsetForView:(UIView *)view withSpace:(CGFloat)space {

// Convert the rect to get the view's distance from the top of the scrollView.
CGRect rect = [view convertRect:view.bounds toView:self];

// Set starting offset to that point
CGFloat offset = rect.origin.y;


if ( view.bounds.size.height < space ) {
    // Center vertically if there's room
    offset -= floor((space-view.bounds.size.height)/2.0);
}
if ( offset + space > self.contentSize.height ) {
    // Clamp to content size
    offset = self.contentSize.height - space;
}

if (offset < 0) offset = 0;

return offset;
}

更改是从条件块中删除第一条路径: if ( self.contentSize.height - offset < space ) 并只留下“else”路径。

于 2013-04-23T14:11:31.493 回答