【问题标题】:Scrollview with navigation bar + auto layout带有导航栏的滚动视图 + 自动布局
【发布时间】:2016-04-12 08:43:03
【问题描述】:

我在 NavigationController 中嵌入了一个 ViewController。我在其中放置了 ScrollView,然后是覆盖整个区域的内容视图(以设置 ScrollView 的内容大小)和一些标签。我尝试为所有控件设置约束,但失败了。

这是它在 Xcode 中的样子:

这是在模拟器中:

红色是滚动视图,绿色是内容视图。当然,我可以滚动视图以获取屏幕底部的标签。

我做错了什么?什么是适当的约束?我当然希望 ScrollView 覆盖窗口的整个可用区域(从导航栏底部到屏幕底部)。

如需完整参考,您可以download the project

【问题讨论】:

  • 我使用UIPanGestureRecognizer 模拟了滚动视图的行为,但是关于滚动视图和自动布局的问题仍然存在。
  • 也许这个答案 (link) 对你有帮助
  • 尝试在界面生成器中的 ViewController 上检查“调整滚动视图插图”。 (我意识到这是一个老问题)
  • 您是如何解决问题的?我遇到了同样的问题...
  • 我不记得了 :(

标签: ios objective-c xcode uiscrollview autolayout


【解决方案1】:

swift 3 代码有效,但界面构建器正在尝试补偿导航栏,因此在添加视图时忽略该栏并将视图放在它上面。 IB会赔偿。

【讨论】:

    【解决方案2】:

    斯威夫特 3:

    self.automaticallyAdjustsScrollViewInsets = false
    

    【讨论】:

    • 使用界面生成器/情节提要对我有用的是从场景属性检查器中取消选中它。
    【解决方案3】:

    这里是关于滚动视图和自动布局的好教程。在找到本教程之前,我花了很多时间解决同样的问题。 http://spin.atomicobject.com/2014/03/05/uiscrollview-autolayout-ios/.

    方法是将滚动视图和内容视图拖到所有区域,就像没有导航栏一样。还要做出正确的约束。

    【讨论】:

    • 我看过这个教程,但我还是无法让它工作:(
    【解决方案4】:

    我认为您看到的差距是由导航栏造成的。间隙为 64 大小,即导航栏 + 状态栏 (44+20) 的大小。您需要将滚动条限制在顶部布局指南中。通过将 64 推为负数。所以你的滚动视图顶部约束将是-64。

    这也可以通过单击 xcode 中 size inspector 中的 position view 按钮一键完成。

    单击位置视图并选择垂直填充容器。这会将滚动视图约束到顶部布局指南。现在选择滚动视图并单击情节提要中的更新约束。

    如您所见,contentView 并没有像 scrollview 那样被限制在视图上,内容视图的按钮处有空间,当视图加载时,导航栏会占用额外的空间,而 contentview 将正好在你需要的地方。

    【讨论】:

    • 这成功了,将内容移到了上面,但我仍然可以滚动视图并在底部看到红色的 ScrollView。
    • 由于运行时控件的位置不同,我也有四个警告。
    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多