使用TPKeyboardAvoiding类时,UITextField弹出太高

时间:2013-04-23 14:03:31

标签: ios iphone objective-c ipad uitextfield

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

enter image description here

在GitHub链接上,Notes说:

  

注释

     

这些类目前将contentInset参数调整为   避免内容在键盘下移动。这样做,而不是   调整框架,以解决导致的iOS错误   在一个生涩的动画中,视图在稳定之前向上跳跃   下。为了便于此解决方法,contentSize是   保持与视图框架的大小至少相同。

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

我已经尝试更改此行:

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

with(add +100):

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

但这不是一个很好的方法,因为这不适用于iPad。

1 个答案:

答案 0 :(得分:1)

最近有同样的问题。对我来说,解决方案是修改 - (CGFloat)idealOffsetForView:(UIView *)视图withSpace:(CGFloat)空间方法。以下是我在项目中的表现:

-(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&lt; space)并且只留下&#34;否则&#34;路径。