0

我遇到了一个非常奇怪的问题,我还不知道如何解决它,我已经连续工作了将近两天(除了吃饭、睡觉、喝咖啡和吸烟)。

我有的:

我的UIScrollView视图控制器内部有一个,包含一定数量的文本字段和一个UICollectionView. 通过一个按钮,我打开了另一个视图控制器,用于将新数据添加到集合视图中。添加新数据项后,回到我的第一个视图控制器,我调用invalidateIntrinsicContentsizemyUIScrollView和 myUICollectionView来调整它们的大小以适应它们的内容(我使用 Autolayout 并让它们都拥抱它们的内容)。在这两个视图上,我都实现了这些方法以很好地适应它们的内容,这部分工作得很好。

我的问题是:

UICollectionView如果我以刚刚描述的方式添加数据,并且如果我处于横向模式,问题就开始了:在返回到我的初始视图控制器并更新内在内容大小后,我的内容 UICollectionView 被替换- 在这样的情况下被替换一种方式,在切换到数据添加视图之前内容的滚动位置UIScrollView现在变成了固定内容偏移量。如果我现在向上滚动,在切换到数据添加视图控制器之前,我可以通过滚动到最大的位置到达内容的位置。

图片(每个人都喜欢):

为了说明这种情况有点难以解释,我附上了两张图片。红色是滚动视图的整个内容区域,深绿色是内容,两者重叠的地方颜色是橄榄色。的可见部分UIScrollView显示在突出显示的边框区域中。

在更新数据之前,内容应该是:

普通的
(来源:grubbrother.com

更新数据和更新 UI 后,内容被之前的滚动位置 / 取代contentOffset

不正常
(来源:grubbrother.com

请帮我解决这些奇怪的事情。不幸的是,我的截止日期很紧,需要继续进行该项目。尽管如此,我真的不知道如何解决这个问题,甚至不知道是什么原因造成的——我完全不知道。

4

1 回答 1

0

尽管我还不知道是什么导致了我的问题中描述的问题,但我发现了一个解决方法,至少以某种方式解决了这些症状:

正如我上面所描述的,切换回UIViewController包含越野车时发生的不需要的内容位移UIScrollView等于切换到另一个场景之前contentOffset的位移。UIscrollView

知道了这一点,我在消失contentOffset后将其设置为零。UIViewController

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];

    [self.scrollView setContentOffset: CGPointZero];
}

当视图重新出现时,我向下滚动到有问题的底部新添加的内容UIScrollView

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    if (self.appearedFromActorsAdding)
    {
        [self.scrollView setContentOffset:CGPointMake(0, self.scrollView.contentSize.height - self.scrollView.frame.size.height) animated:YES];
    }
}

希望这可以帮助遇到同样问题的任何人。

于 2012-12-13T14:22:59.810 回答