【问题标题】:Scrollview with View loaded from xib带有从 xib 加载的视图的滚动视图
【发布时间】:2015-05-21 07:36:39
【问题描述】:

我这里有问题。在过去的 3-4 天里,我试图找到解决方案,但无济于事。我正在使用 xib 将视图作为子视图加载到滚动视图。 我也在使用 iOS8 和大小类以及自动布局。 问题是视图被添加到滚动视图中,但滚动视图无法超越一个点。那就是我无法滚动到底部。 这很令人沮丧,因为我刚刚开始开发 iOS 应用程序。

我附上了我应用的约束的屏幕截图。希望能在这里得到一些帮助。

第一个屏幕截图是实际视图控制器的视图,其中包含滚动视图。并且 Place Detail Info View 是添加从 xib 加载的视图的占位符。屏幕截图还列出了不同的约束。

第二个和第三个屏幕截图是我试图加载到 scrollView 中的 xib 文件。

请告诉我哪里出错了。

【问题讨论】:

  • 如果给scrollView添加一个视图([scrollView addSubview:view],是不是在它们后面设置了视图的约束?
  • 视图会自动添加到滚动视图,因为我在自定义视图中覆盖了初始化编码器。另外我还没有为添加的视图重新添加约束
  • 很难看,但看起来您将子视图的高度设置为 367?那是xib中包含的视图的实际高度吗?如果不是,您将使用该高度约束截断视图。您还可以分享您用于加载 xib 并将其添加到情节提要的代码吗?
  • @jeffro37 从 xib 加载的视图的高度大于 367(我想可能是 600)。加载 xib 的代码并不多。我刚刚创建了一个视图,其中包含通过 Interface Builder 连接的所有 xib 子视图。抱歉回复晚了。
  • @nikhil.thakkar 尝试将该子视图的高度设置为 600,看看会发生什么。我认为您的答案可能是根据 xib 中视图的实际高度设置高度约束,但测试这是第一步。

标签: ios uiscrollview autolayout xib


【解决方案1】:

如上所述,问题与滚动视图的内容大小有关。只需尝试向滚动视图的每个直接子视图添加宽度和高度(显式或隐式:参见下面的解释)约束,然后定义它们之间的所有距离约束。 *“隐式”宽度/高度约束是指两个视图之间的“纵横比”、“等宽/高度”关系。 附言在处理类似滚动视图的控件和自动布局时,应该有一套详尽的(其中一些可能看起来是多余的)子视图约束。 希望这会有所帮助。

【讨论】:

  • 我已将所有相关约束添加到滚动视图中的所有视图中。但它仍然不起作用。手动将内容大小设置为硬编码值后,我能够滚动,但这种方法在 iPhone 6 和 6 plus 上失败。
  • 由于我看不到你所拥有的全貌,我只能建议你在调用 viewDidLayoutSubviews 时将滚动视图的内容大小设置为 yourScrollView.bounds.size (我假设您的滚动视图中没有内容插入并且您使用视图控制器)。干杯。
【解决方案2】:

您的问题在于哪个视图是您的滚动视图的直接子视图。在自动布局中,滚动视图根据其子视图计算其内容大小。

从这个视图中删除所有约束后按照这些步骤操作,我希望你能解决你的问题。

1.为您的滚动视图设置所有 4 个约束,即前沿、后沿、超级视图和底部约束。

2.现在对于滚动视图的直接子视图,设置所有 4 个约束(前导、尾随、顶部和底部),以及这些设置的高度约束并使宽度等于滚动视图。 如果您的直接子视图的高度大于您的屏幕尺寸或滚动视图,它肯定会滚动。

运行并检查您是否能够滚动并继续前进。

在第 2 步之后,所有与约束相关的模糊类型错误都将得到解决。现在您可以像往常一样设置所有其他约束。

要更清楚地理解滚动视图中的设置约束,请参阅https://www.youtube.com/watch?v=4oCWxHLBQ-A

【讨论】:

  • 感谢您的链接。我做了与您建议的完全相同的事情。你可以在我分享的截图中看到所有的限制。问题是视图是在运行时从 xib 加载的。
  • 正如你所说,你重写了 init 方法,你能告诉我那个方法你做了什么
【解决方案3】:

在界面构建器本身中有一个选项可以预览所有可用设备的约束。这将确保您的约束适用于 Apple 的所有可用设备。这是一个可以帮助您的快速教程。

http://adoptioncurve.net/archives/2014/08/working-with-size-classes-in-interface-builder/

一旦经过验证,您仍然无法找到合适的解决方案,那么您的滚动视图的内容大小可能有问题。尝试增加滚动视图内容的大小。 我希望这能解决您的问题。

愉快的编码。干杯:)

【讨论】:

  • 预览选项被破坏,因为当我看到预览时,视图已经超出了屏幕的范围,因为我正在使用尺寸类,但它在实际设备上运行良好。我也尝试更改内容大小,但它不起作用。
  • 我坚信您应该在界面构建器中修复它并为其添加适当的约束,然后在预览中检查它是否相应地工作。
  • 我真的不知道在这里做什么。布局在每个真实设备中看起来都很好。 iOS 开发虽然是一个昂贵的平台,但无法与 Android 相提并论。
猜你喜欢
  • 2019-07-04
  • 2019-04-19
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 2016-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多