从 UINavigationBar 弹出视图控制器时出现 UIScrollView 错误
Posted
技术标签:
【中文标题】从 UINavigationBar 弹出视图控制器时出现 UIScrollView 错误【英文标题】:UIScrollView error when pop view controller from UINavigationBar 【发布时间】:2014-02-10 14:35:00 【问题描述】:我有这个带有分页 UIScrollView 的视图控制器。具体来说,这个滚动视图有 3 页,我希望它从第二页开始。因此,当视图加载时,我将内容偏移量调整为从第二页开始:
CGFloat offsetX = _pageWidth * SECOND_PAGE;
[_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
但是当我点击 UINavigationBar 中的“返回”按钮,并且 UIScrollView 不在第二页时,就会发生错误。
堆栈跟踪显示导航控制器删除了视图,deallocs,在滚动视图中调用方法 removeFromSuperview
,然后 UIScrollView 调用 adjustContentoffsetIfNeccesary--->notifyDidScroll
。所以我认为发生的事情是 UIScrollView 想要通知 UIScrollView 委托发生了滚动,但委托已经被释放,并且发生了EXC_BAD_ACCESS
。
那么,有谁知道实现我想要的行为的正确方法是什么?
这是我谈到的堆栈跟踪:
#1 0x0075595b in -[UIScrollView(UIScrollViewInternal) _notifyDidScroll] ()
#2 0x0073fc43 in -[UIScrollView setContentOffset:] ()
#3 0x0075ccae in -[UIScrollView(UIScrollViewInternal) _adjustContentOffsetIfNecessary] ()
#4 0x00758b46 in -[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:pin:tramplingDragFlags:] ()
#5 0x00758bda in -[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:pin:] ()
#6 0x0074069e in -[UIScrollView removeFromSuperview] ()
#7 0x0071a715 in -[UIView dealloc] ()
#8 0x00718124 in -[UIView release] ()
谢谢。
【问题讨论】:
您是否尝试过启用僵尸? ***.com/questions/5386160/… 我也有同样的问题,请问有解决方法吗?谢谢 【参考方案1】:你可以清除_scrollView
的委托;
或
[_scrollView setContentOffset:CGPointMake(offsetX, 0) animated:NO];
当动画结束时,scrollViewDidScroll
被调用,你可以使用_scrollView
的委托,但它被释放,变成了一个野指针。
【讨论】:
以上是关于从 UINavigationBar 弹出视图控制器时出现 UIScrollView 错误的主要内容,如果未能解决你的问题,请参考以下文章
UINavigationBar titleTextAttributes 从视图控制器返回后未更新
从 UIPageViewContoller 中包含的视图设置 UINavigationBar 标题
从多个视图向 UINavigationBar 添加和删除 UIBarButtonItems