【问题标题】:UIScrollView unwanted scrolling after addSubview or changing frameUIScrollView 在 addSubview 或更改框架后不需要滚动
【发布时间】:2012-06-25 22:33:29
【问题描述】:

我有一个充满子视图的UIScrollView,在创建它并最初填充它时一切都很好。

但是当我添加一个位于可见屏幕部分之外的新子视图时,或者当我只是调整也在可见屏幕部分之外的现有子视图的大小时,随后会出现 0.3 秒长的滚动动画(我可以从我的代表那里看到它发生的情况)似乎与新添加/调整大小的元素相匹配。

尝试:

  • pagingEnabled 始终为 NO。
  • 在子视图操作期间将 scrollEnabled 设置为 NO 没有帮助。
  • 在子视图操作后执行 setContentOffset:animated:NO 不会阻止动画。
  • 包含我所有子视图的单个巨大子视图无济于事。

我目前的解决方法是最初将框架设置为适合可见屏幕部分,或者在另一个超级视图中调整大小,但感觉很脏,并且无法处理所有情况......

有没有办法在以编程方式操作子视图时防止这种自动滚动动画?

Xcode 4.3,适用于 5.1 的 iOS SDK。

【问题讨论】:

    标签: ios uiscrollview uikit


    【解决方案1】:

    我遇到了这个问题,因为我在添加子视图之前设置了滚动视图的内容大小。

    只要我更改代码以便在添加子视图后设置滚动视图的内容大小,问题就消失了。

    【讨论】:

      【解决方案2】:

      我也发现了这个问题,找到了这个解决方案http://www.iphonedevsdk.com/forum/iphone-sdk-development/94288-disabling-uiscrollview-autoscroll.html

      它涉及对UIScrollView 进行子类化,并且在以下方法中不输入任何代码。

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

      就像那个人在链接上所说的那样,我发现它有效并且到目前为止没有问题。希望它对你有用。

      【讨论】:

      • 它有效,谢谢!有趣的是,我看到了那个页面,但是当我看到他们在谈论分页时停止阅读,这不适用于我的情况;应该继续阅读! :-P
      • 在该方法中设置断点,我看到以下调用堆栈:(我的子视图操作方法)-> UIView addSubview -...-> UITextView didMoveToSuperview -> UITextView webViewDidChange: -> UITextView scrollRectToVisibleInContainingScrollView -> NoAutoScrollUIScrollView scrollRectToVisible:animated:.所以看起来 UITextView 正在强制滚动其 UIScrollView 容器。如果 Apple 改变它的工作方式,上述技巧可能有一天会停止工作,但现在应该这样做......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-05-25
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      相关资源
      最近更新 更多