0

所以我想在 UIView(320,470) 中创建一些比 Viewport (320, 367) 高的细节内容。

我在 IB 中创建它,就像(见图)。在我 setContentSize 使 UIScrollView 可滚动之前,一切看起来都很好。

这是我放置的代码ViewDidLoad

CGRect frame = self.uiContent.frame;
[self.uiScrollView addSubview:self.uiContent];
[self.uiScrollView setContentSize:frame.size];

调用 setContentSize 后,内容会随着动画滚动到中间。如何防止自动滚动?

在此处输入图像描述

4

1 回答 1

1

我找到了罪魁祸首..它是UITextView。对不起,如果我没有提到我在地址标签下使用 UITextView 作为多行标签。

在其他问题上引用“Taketo Sano”:https ://stackoverflow.com/a/5673026/453407

我通过跟踪调用跟踪调查了自动滚动是如何完成的,并发现当在 UITextField 中键入一个字母时会调用一个内部 [UIFieldEditor scrollSelectionToVisible]。此方法似乎作用于 UITextField 的最近祖先的 UIScrollView。

UIScrollView更改文本UITextView时自动滚动到。UITextView所以我通过子类化UIScrollview和覆盖找到了解决方案

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated {

并且不返回任何内容以禁用自动滚动...如果您打算将来使用它,只需使用 bool 变量通过使用来启用/禁用它

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated {
    if (!self.disableAutoScroll) {
        [super scrollRectToVisible:rect animated:animated];
    }
}

因此您可以在通过代码更改 UITextView 之前禁用自动滚动并在之后启用它。

于 2012-10-04T04:47:59.473 回答