【发布时间】:2013-02-27 00:56:10
【问题描述】:
我有一个相当简单的视图配置:
一个UIViewController,有一个孩子UIScrollView 和一个UIImageView 在这个UIScrollView。
我将UIImageView 设置为足以突破可见区域的高度(即高于1024pt),并将UIImageView 的Bottom space to superview 约束设置为固定的正值(例如20 )。
整个设置按预期工作,图像在其父级中很好地滚动。 除非当视图滚动时(滚动到视图底部效果更明显),然后消失,然后再次出现(您切换到另一个视图并返回)滚动值恢复,但内容滚动视图被移动到其父视图的外部顶部。
这个不好解释,我试着画一下:
如果您想测试/查看源代码(或情节提要,我没有编辑任何一行代码)。我在我的github上放了一个小demo:https://github.com/guillaume-algis/iOSAutoLayoutScrollView
我确实阅读了iOS 6 changelog 和关于这个特定主题的解释,并认为这是第二个选项(纯自动布局)的正确实现,但在这种情况下,为什么UIScrollView 的行为如此不规律?我错过了什么吗?
编辑:这与#12580434 uiscrollview-autolayout-issue 完全相同。答案只是解决方法,因为有人找到了解决此问题的正确方法,还是这是 iOS 错误?
编辑 2:我找到了另一种解决方法,它将滚动位置保持在用户离开它的相同状态(这是对 12580434 接受的答案的改进):
@interface GAViewController ()
@property CGPoint tempContentOffset;
@end
@implementation GAViewController
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.tempContentOffset = self.mainScrollView.contentOffset;
self.scrollView.contentOffset = CGPointZero;
}
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
self.scrollView.contentOffset = self.tempContentOffset;
}
这样基本保存viewWillAppear中的偏移量,重置为原点,然后恢复viewDidAppear中的值。这两个调用之间似乎出现了问题,但我找不到它的起源。
【问题讨论】:
-
感谢您的第二次编辑,这似乎是我能找到的最好的工作。 Mark Kryzhanouski 的解决方案在我的设置中不起作用。 EDIT 2 的唯一问题是,在向后导航时,您可以看到滚动视图偏移量恢复到其原始位置。
-
就我而言,我能够通过将所有约束添加到顶层视图而不是滚动视图来解决这个问题。
-
对这个问题的精彩解释。我现在遇到了它,我不敢相信它还没有被修复。
-
您真的应该将您的 EDIT 2 写入答案,以便我们对其进行投票。
-
@Pang 支持这个问题 ;)。我没有将其添加为答案,因为它只是一种解决方法。并且 afaik 它已在 iOS 7 中修复。
标签: ios uiscrollview autolayout