运行时滚动视图中的额外空间(插入)

时间:2013-10-08 16:08:48

标签: objective-c uiscrollview storyboard ios7 autolayout

设置

我正在使用Xcode 5中的一个视图来显示一组文本字段。为了在键盘出现时处理滚动,我使用滚动视图来放置我的TextFields。我正在使用autolayout。

问题

我正在努力解决在运行时将额外空间添加到滚动视图顶部的问题。就像插件被应用到我的滚动视图一样,虽然我已通过日志记录确认插图为零。

在我的 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 的高度,其值为 64 ,以便适合导航状态栏和底部的标签栏。< / p>

我没有任何潜在问题的布局通知。滚动视图顶部和底部空间约束定位为 0 点(我从状态和标签栏中设定。

在运行应用程序并在滚动视图中查看额外空间时,滚动条仅覆盖预期空间(它们不包括此可用区域中的额外空间)。

最后要注意的一点是。当我执行键盘通知逻辑时。 (taken from apple here...)问题解决了,没有更多的空间。这使得它看起来像故事板中配置的内容的初始化问题?

谢谢!

3 个答案:

答案 0 :(得分:61)

iOS7中的UIViewControllers有一个名为automaticallyAdjustsScrollViewInsets的设置。如果这是YES,则会根据状态栏,导航栏和工具栏或标签栏的高度自动调整滚动视图的插图。

此设置也可以在Interface Builder中设置;它在属性检查器上称为“调整滚动视图插入”。

Screenshot

答案 1 :(得分:0)

除了在Greg指示的IB中的视图控制器上禁用“调整滚动视图插入”之外,我发现修复此问题的另一种方法是编辑滚动视图和滚动视图之间的“顶部对齐”约束。顶部布局指南。将后者从“Top Layout Guide.Bottom”更改为“Top Layout Guide.Top”会使事情在运行时看起来不错,尽管人们仍然可以在故事板中看到额外的空间(Xcode 6.4)。

答案 2 :(得分:0)

在viewDidLoad方法中调用以下代码行:

self.automaticallyAdjustsScrollViewInsets = false