Uiscrollview scrollRectToVisible UITextField不';t使用自动布局进行滚动

Uiscrollview scrollRectToVisible UITextField不';t使用自动布局进行滚动,uiscrollview,uitextfield,autolayout,Uiscrollview,Uitextfield,Autolayout,我似乎根本无法让我的UIScrollView滚动,这样它就不会模糊我的UITextField。我原以为scrollRectToVisible会是我的救世主,但这似乎是不可能的。也许我遗漏了一些东西,比如将文本字段的坐标转换为滚动视图。无论哪种方式,请查看我的示例项目 哦,这个项目可能缺少代理连接,但我检查过了,它仍然没有滚动 我见过其他类似的问题,但没有一个提到自动布局。在转换为自动布局后,我对scrollRectToVisible::也有问题。我刚刚将它改为直接调用setContentOff

我似乎根本无法让我的UIScrollView滚动,这样它就不会模糊我的UITextField。我原以为scrollRectToVisible会是我的救世主,但这似乎是不可能的。也许我遗漏了一些东西,比如将文本字段的坐标转换为滚动视图。无论哪种方式,请查看我的示例项目

哦,这个项目可能缺少代理连接,但我检查过了,它仍然没有滚动


我见过其他类似的问题,但没有一个提到自动布局。

在转换为自动布局后,我对scrollRectToVisible::也有问题。我刚刚将它改为直接调用
setContentOffset::
,它又开始工作了。

我遇到了同样的问题,我想将自动布局的UITextEdit滚动到视图中,而不让它成为第一响应者

对我来说,问题是UITextField的边界后来是在自动布局过程中设置的,因此如果在设置布局后立即设置,那么边界仍然无效

为了解决这个问题,我确实创建了UITextField的子代,覆盖了
setBounds:
,并添加了一个0计时器,以便“稍后”滚动到视图中(此时您无法滚动,因为此时可能无法完成系统的自动布局过程)

如果该字段应该使用屏幕键盘进行额外编辑,只需稍后调用becomeFirstResponder:它使用私有的
scrollTextFieldToVisible
API自动滚动到键盘上方的视图中,该API反过来调用scrollview的
scrollRectToVisible:animated:


顺便说一句,您的示例链接已断开。

TPKeyboardAvoidingScrollView解决了此问题,但我不想在一两行代码就能解决此问题时使用整个第三方类。我在回答中添加了一个编辑。如果不是这样的话,就检查一下这种可能性。
[self.scrollView scrollRectToVisible:textField.bounds animated:YES];
@interface MyTextField: UITextField
{
  bool _scrollIntoView;
}
..
@end
@implementation MyTextField
-(void)setBounds:(CGRect)bounds
{
  bool empty=CGRectIsEmpty(self.bounds);
  bool isFirstResponder=self.isFirstResponder;
  [super setBounds:bounds];
  if (empty && !isFirstResponder && _scrollIntoView) 
    [self performSelector:@selector(scrollIntoViewLater) withObject:nil afterDelay:0];
  else if (empty && isFirstResponder)
    [self performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0];
}

-(void)scrollIntoViewLater
{
  CGRect r=[scrollView convertRect:self.bounds fromView:self];
  [scrollView scrollRectToVisible:r animated:TRUE];
}
@end