UIScrollView 在 setContentSize 之后滚动

Posted

技术标签:

【中文标题】UIScrollView 在 setContentSize 之后滚动【英文标题】:UIScrollView scrolled after setContentSize 【发布时间】:2012-10-01 04:48:02 【问题描述】:

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

【问题讨论】:

不知道,但你可以尝试 [uiScrollView scrollsToTop] 之后 你在setContentSize之后有没有试过addSubview,是一样的还是不一样的?? 我已经尝试过了...scrollsToTop,更改顺序并同时执行...没有运气... setContentOffset 和 scrollRectToVisible 呢?? 仍然没有运气...我认为setContentSize 调用了导致ScrollView 滚动的东西。但是如果我添加简单的UIView 和颜色,它不会滚动......奇怪的事情...... 【参考方案1】:

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

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

我已经通过跟踪 调用跟踪,并发现一个内部 [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 之前禁用自动滚动并在之后启用它。

【讨论】:

以上是关于UIScrollView 在 setContentSize 之后滚动的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Jetpack Compose Alpha 12 会导致 setContent 出现错误

Ueditor百度编辑器中的 setContent()方法的使用

QT 使用QDomDocument::setContent()读XML文件总是返回false

Gui系统之View体系---View的setContent

Android jetpack compose NoSuchMethodError: No static method setContent

ComposeView 与视图绑定