UIScrollView在setContentSize之后滚动

时间:2012-10-01 04:48:03

标签: ios uiscrollview

所以我想在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后,内容会以动画滚动到中间。如何防止自动滚动?

enter image description here

1 个答案:

答案 0 :(得分:1)

我找到了罪魁祸首......那是UITextView。很抱歉,如果我没有提到我在地址标签下使用UITextView作为多行标签。

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

  

我已经通过跟踪来调查自动滚动是如何完成的   call-trace,发现内部[UIFieldEditor   当输入一个字母时,会调用scrollSelectionToVisible]   的UITextField。这个方法似乎在UIScrollView上起作用   最近的UITextField的祖先。

更改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之前禁用自动滚动,然后再启用它。