滚动视图加载内容的不同部分不一致? (iOS)

Posted

技术标签:

【中文标题】滚动视图加载内容的不同部分不一致? (iOS)【英文标题】:Scroll view loads a different part of the content inconsistently? (iOS) 【发布时间】:2013-07-12 16:49:14 【问题描述】:

这对我来说似乎有点奇怪,但我是 ios 新手,所以可能会发生一些我不知道的明显事情(我在不一致的部分加上星号):

    我有两个选项卡:Tab1 和 Tab2 Tab1 是基本视图。 Tab2 是 Master-Detail 类型的设计模式,以 UITableViewController 作为 Master 选项卡,以 Scroll View(嵌套在 UIViewController 中)作为 Detail 选项卡。 每当我单击 Tab2 主视图中的一个单元格时,它都会按预期将我带到详细信息视图。 如果我在“详细信息”视图中向下滚动,然后单击 Tab1,然后单击 Tab2,它会在停止的位置重新加载详细信息视图(向下滚动)。* 但是,在我执行此操作后,如果我单击 Tab1,然后单击 Tab2(与我在上一步中所做的完全相同),它会从页面顶部重新加载详细信息视图。*

我告诉它使用此代码从页面顶部重新加载详细信息视图,该代码位于包含滚动视图的视图控制器的 Class 内:

-(void)viewDidAppear:(BOOL)animated
    [self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, 0) animated:NO];
    [self.scrollView setScrollEnabled:YES];
    [super viewDidAppear:animated];

我只是发现第一次在选项卡之间来回切换(第 5 步)并没有从屏幕顶部显示滚动视图,但第二次在选项卡之间来回切换(第 6 步)真的很奇怪) 确实从屏幕顶部显示了滚动视图。

知道是什么原因造成的吗?多次重新加载选项卡时,它们是否通过不同的方法加载?

任何建议将不胜感激!谢谢!

【问题讨论】:

如果你在你的viewDidAppear方法中加入一个NSLog,是不是每次都会输出? @SimonGermain 是的,它每次都输出它。也许内容偏移量第一次被覆盖?它会被什么覆盖? @SimonGermain 等等,我搞定了!我把 viewDidAppear 改成了 viewWillAppear,效果很好。 如果您NSLog("%@", self.scrollView),您是否每次都能获得正确的滚动视图,并且它是否有关联的 CALayer?确保将其添加到超级视图中。 太棒了!很高兴听到这个消息:) 【参考方案1】:

我想通了,应该是viewWillAppear,而不是viewDidAppear

-(void)viewWillAppear:(BOOL)animated
    [self.scrollView setContentOffset:CGPointMake(self.scrollView.contentOffset.x, 0) animated:NO];
    [self.scrollView setScrollEnabled:YES];
    [super viewDidAppear:animated];

【讨论】:

以上是关于滚动视图加载内容的不同部分不一致? (iOS)的主要内容,如果未能解决你的问题,请参考以下文章

iOS中NSRunloop与滚动视图时停止加载的问题

Ipad iOS 滚动不一致:禁用正文滚动但允许在某些元素上滚动

iOS 7,表头视图不浮动

为啥有时滚动视图和子视图大小不一致

加载内容后如何停止无限滚动

iOS - 滚动视图和 setContentSize