【问题标题】: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 开启或关闭?

标签: objective-c uiscrollview storyboard ios7 autolayout


【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多