【问题标题】:UIScrollView Causing "Misplaced Views" AutoLayout issuesUIScrollView 导致“错位视图”自动布局问题
【发布时间】:2015-02-04 21:35:50
【问题描述】:

我在使用 UIScrollView 时遇到了一个奇怪的 AutoLayout 相关问题(没有它就不会出现该问题)。

我有一个UIScrollView,它被限制在UIView 的边界内(包含在UIViewController 内),在其中,我试图将UILabelUITextField 并排放置。我已将UILabel 限制在左边界和上边界,它的宽度和高度受到限制(见下面的屏幕截图):

在这个UILabel 旁边是一个UITextField,它被限制在左侧、顶部和右侧,并且高度也受到限制。但是,这会导致“错位视图”警告,指出“预期 width = 163,实际 width = 413”,如下面的屏幕截图所示:

当我选择“重置为建议的约束”时,“错位的视图”问题消失了,但在它的位置我留下了 413 分的width 约束,这是我希望避免的,因为我不希望这个 UIViewController 在较小的设备上水平滚动。

【问题讨论】:

    标签: swift uiscrollview ios8 storyboard autolayout


    【解决方案1】:

    滚动视图具有大小(它在屏幕上占据的大小)和内容大小(整个可滚动区域的大小)。在自动布局中,内容大小是根据滚动视图中项目的约束自动计算的。这是一个问题,因为您试图使滚动视图与屏幕具有相同的宽度,然后将项目限制在该宽度上。当你这样做时,自动布局坚持你给你的文本字段一个明确的宽度,以便它可以计算你的可滚动区域的宽度。

    要做你想做的事,请执行以下操作:

    1. 在滚动视图中添加“内容视图”。此视图将是滚动视图中唯一的顶级项目。它将您的所有内容作为它的子视图。拖出UIView 并将其添加到您的滚动视图中。将其顶部、前导、底部和后沿约束到滚动视图。将其宽度限制为滚动视图的宽度。给它一个高度限制并将其设置为您希望内容区域的大小。

    2. 将所有标签和文本字段添加到此内容视图。现在您可以将它们限制在内容视图的中心或限制在边缘,它会按您的意愿工作。

    【讨论】:

      猜你喜欢
      • 2012-09-16
      • 2018-12-01
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多