运行时滚动视图中的额外空间(插图)
Posted
技术标签:
【中文标题】运行时滚动视图中的额外空间(插图)【英文标题】:Extra Space (inset) in Scroll View at run time 【发布时间】:2013-10-08 16:08:47 【问题描述】:设置:
我正在 Xcode 5 中处理一个显示一组文本字段的视图。为了在键盘出现时处理滚动,我使用滚动视图来放置我的 TextFields。我正在使用自动布局。
问题:
我正在努力解决在运行时将额外空间添加到滚动视图顶部的问题。就像一个插图被应用到我的滚动视图,虽然我已经通过日志确认插图是零。
在我的 viewDidLoad() 方法实现中,我这样做是为了确认值...
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
self.scrollView.contentInset = contentInsets;
self.scrollView.scrollIndicatorInsets = contentInsets;
self.scrollView.contentSize = self.scrollView.bounds.size;
self.scrollView.contentOffset = CGPointMake(0.0, 0.0);
NSLog(@"Content Size: %f x %f", self.scrollView.contentSize.height, self.scrollView.contentSize.width);
NSLog(@"Bounds Size: %f x %f", self.scrollView.bounds.size.height, self.scrollView.bounds.size.width);
NSLog(@"Frame Size: %f x %f", self.scrollView.frame.size.height, self.scrollView.frame.size.width);
NSLog(@"Inset Size top: %f bottom: %f", self.scrollView.contentInset.top, self.scrollView.contentInset.bottom);
NSLog(@"Scroll Inset Size top: %f bottom: %f", self.scrollView.contentInset.top, self.scrollView.contentInset.bottom);
输出:
2013-10-08 11:38:42.953 test[6440:a0b] Content Size: 455.000000 x 320.000000
2013-10-08 11:38:42.954 test[6440:a0b] Bounds Size: 455.000000 x 320.000000
2013-10-08 11:38:42.955 test[6440:a0b] Frame Size: 455.000000 x 320.000000
2013-10-08 11:38:42.955 test[6440:a0b] Inset Size top: 0.000000 bottom: 0.000000
2013-10-08 11:38:42.956 test[6440:a0b] Scroll Inset Size top: 0.000000 bottom: 0.000000
在我的第一个文本字段上方添加的空格(插图)似乎大约等于标准导航标题,但这可能是巧合。
我的滚动视图的高度设置为 455,y 值为 64,以适应导航状态栏和底部的标签栏。
我没有任何关于潜在问题的布局通知。滚动视图顶部和底部空间约束定位为 0 点(我从状态和标签栏推测。
当运行应用并在滚动视图中看到额外的空间时,滚动条仅覆盖了预期的空间(它们不包括这个额外的空间作为可滚动区域的一部分)。
最后一件事要注意。当我执行我的键盘通知逻辑时。 (taken from apple here...) 问题自行解决,没有空间了。这看起来像是故事板中配置的初始化问题?
谢谢!
【问题讨论】:
我猜这不是问题,因为被 NSLogged 的插图是 0,但是你有没有“调整滚动视图插图”/automaticallyAdjustsScrollViewInsets 开启或关闭? 【参考方案1】:ios7 中的 UIViewControllers 有一个名为 automaticallyAdjustsScrollViewInsets
的设置。如果是YES
,则滚动视图的插图将根据状态栏、导航栏、工具栏或标签栏的高度自动调整。
这个设置也可以在Interface Builder中设置;它在属性检查器上称为“调整滚动视图插图”。
【讨论】:
亲爱的苹果,我恨你。把我这浪费的2小时还给我 只浪费了两个小时?你很幸运... :-( 你节省了我不知道多少小时非常感谢 你仍然在 iOS8.3 中节省时间:-) 但是你能告诉我它背后的确切原因吗?我不想盲目实现。【参考方案2】:除了按照 Greg 的指示在 IB 中的视图控制器上禁用“调整滚动视图插图”之外,我发现解决此问题的另一种方法是编辑滚动视图和滚动视图之间的“顶部对齐”约束顶部布局指南。将后者从“Top Layout Guide.Bottom”更改为“Top Layout Guide.Top”可以在运行时看起来还不错,尽管仍然可以看到故事板中的额外空间(Xcode 6.4)。
【讨论】:
【参考方案3】:在 viewDidLoad 方法中调用这行代码:
self.automaticallyAdjustsScrollViewInsets = false
【讨论】:
以上是关于运行时滚动视图中的额外空间(插图)的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView setContentOffset:动画:奇怪的行为