scrollRectToVisible UITextField 不使用自动布局滚动

Posted

技术标签:

【中文标题】scrollRectToVisible UITextField 不使用自动布局滚动【英文标题】:scrollRectToVisible UITextField doesn't scroll with Autolayout 【发布时间】:2013-01-03 03:19:49 【问题描述】:
[self.scrollView scrollRectToVisible:textField.bounds animated:YES];

我似乎根本无法让我的 UIScrollView 滚动,以免它遮挡我的 UITextField。我认为 scrollRectToVisible 将是我的救星,但看起来不行。也许我错过了将我的 textField 坐标转换为我的滚动视图之类的东西。无论哪种方式,请查看我的示例项目。

https://github.com/stevemoser/Programming-ios-Book-Examples/tree/master/ch20p573scrollViewAutoLayout2

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

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

【问题讨论】:

TPKeyboardAvoidingScrollView 解决了这个问题,但我不想使用整个第三方类来解决它。 我在回答中添加了一个编辑。如果不是这种情况,只需检查这种可能性。 【参考方案1】:

我在转换为自动布局后也遇到了scrollRectToVisible:: 的问题。我只是将其更改为直接调用setContentOffset::,然后它又开始工作了。

【讨论】:

【参考方案2】:

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

对我来说,问题是 UITextField 的边界是在自动布局传递期间稍后设置的,因此如果您在设置布局后立即执行此操作,则边界还无效。

要解决方法,我确实创建了 UITextField 的后代,确实覆盖了setBounds: 并添加了一个 0 计时器以“稍后”滚动到视图中(您不能在那一刻滚动,因为系统的自动布局通道可能没有到那时就完成了)

@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

如果该字段还应该可以使用屏幕键盘进行编辑,只需稍后调用 becomeFirstResponder:它会使用私有的scrollTextFieldToVisible API 自动滚动到键盘上方的视图中,然后调用滚动视图的 scrollRectToVisible:animated:

顺便说一句,您的示例链接已损坏...

【讨论】:

以上是关于scrollRectToVisible UITextField 不使用自动布局滚动的主要内容,如果未能解决你的问题,请参考以下文章

当我使用 contentInset 时,我不完全理解 scrollRectToVisible

scrollRectToVisible UITextField 不使用自动布局滚动

scrollRectToVisible 在页面视图控制器中不起作用 - iPhone sdks

小地图

滚动 UICollectionView 到部分标题视图

IOS textView 委托