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