我有一个相当简单的视图配置:
一个UIViewController
,一个孩子UIScrollView
和一个UIImageView
在这UIScrollView
。我将 设置为UIImageView
足以突破可见区域的高度(即高于1024pt
),并将Bottom space to superview
my 的约束设置UIImageView
为固定的正值(20
例如)。
整个设置按预期工作,图像在其父级中很好地滚动。除非当视图滚动时(滚动到视图底部效果更明显),然后消失,然后再次出现(您切换到另一个视图并回来)滚动值恢复,但内容滚动视图移动到其父视图的外部顶部。
这个不好解释,我试着画一下:
如果您想测试/查看源代码(或情节提要,我没有编辑任何一行代码)。我在我的github上放了一个小demo:https ://github.com/guillaume-algis/iOSAutoLayoutScrollView
我确实阅读了iOS 6 更改日志和关于这个特定主题的解释,并认为这是第二个选项(纯自动布局)的正确实现,但在这种情况下,为什么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
。问题似乎发生在这两个调用之间,但我找不到它的起源。