UIScrollview 不适用于 Storyboard
UIScrollview not working with Storyboard
您好,我正在尝试在情节提要中设置滚动视图,并按照以下步骤进行操作:
- 向根视图添加滚动视图。
- 将零空格固定到超级视图的所有边缘。
- 在上面的scrollview中添加一个UIView(contentView)。
- 将零空格固定到滚动视图的所有边缘添加一些小部件
contentView 并将 contentView 的高度更改为 2000.
我看到此解决方案适用于我看过的许多教程,但不适用于我。我究竟做错了什么?我用 swift.
谁能一步步解释如何在故事板中设置滚动视图?
我的约束:
好的,让我们想象以下视图层次结构(请注意,如果您在 "Identity Inspector" 的 "Document" 部分中为这些视图指定唯一名称,则在 Interface Builder 中查看约束会更容易):
要设置它,您需要在 IB 中添加以下约束(我打算用 VFL 编写它,因为这是显示约束的一种非常简洁的方式):
显然,相对于它的父视图(主视图,在这个例子中)定义滚动视图:
H:|[scrollView]|
V:|[scrollView]|
定义,contentView
使得
它的宽度与主视图相同(==view
),并且
滚动视图的 contentSize
将更改以适应 contentView
的大小。根据 TN2154,滚动视图及其子视图之间的约束定义了滚动视图的 contentSize
,而不是子视图的相对大小。
因此:
H:|[contentView(==view)]|
V:|[contentView]|
定义三个标签的布局,使它们在 contentView
:
范围内偏移
H:|-[label1]-|
H:|-[label2]-|
H:|-[label3]-|
与其硬编码 contentView
的高度(以及滚动视图的 contentSize
,不如定义标签与 [= 的垂直高度的关系15=],它(由于上面的第 2 步)调整滚动视图 contentSize
的垂直高度:
V:|-[label1]-[label2]-[label3]-|
这就是您需要做的全部。我没有对任何宽度进行硬编码(主视图自动具有宽度,滚动视图,更重要的是 contentView
定义了与此相关的宽度。但是标签宽度是从 contentView
,并且 contentView
高度(以及滚动视图的 contentSize
)是从三个标签的固有高度推断出来的。
最终结果是 IB 中的约束如下所示:
仅供参考,如果您想进行一些诊断,您可以在模拟器上 运行 应用程序时单击查看调试按钮:
您可以查看视图(以及可选的约束)并确保一切正常:
您还可以通过 (lldb)
提示查看 _autolayoutTrace
:
(lldb) po [[UIWindow keyWindow] _autolayoutTrace]
UIWindow:0x7fbbb3617910
| •UIView:0x7fbbb349a840
| | *UIScrollView:0x7fbbb3491c80
| | | *UIView:0x7fbbb348e180
| | | | *UILabel:0x7fbbb348e450'Label'
| | | | *UILabel:0x7fbbb3490670'Label'
| | | | *UILabel:0x7fbbb3490a70'Label'
| | | UIImageView:0x7fbbb34a3eb0
| | | UIImageView:0x7fbbb34a3800
| | *_UILayoutGuide:0x7fbbb349a970
| | *_UILayoutGuide:0x7fbbb349b460
这确认没有布局冲突,也没有模棱两可的布局。
您好,我正在尝试在情节提要中设置滚动视图,并按照以下步骤进行操作:
- 向根视图添加滚动视图。
- 将零空格固定到超级视图的所有边缘。
- 在上面的scrollview中添加一个UIView(contentView)。
- 将零空格固定到滚动视图的所有边缘添加一些小部件 contentView 并将 contentView 的高度更改为 2000.
我看到此解决方案适用于我看过的许多教程,但不适用于我。我究竟做错了什么?我用 swift.
谁能一步步解释如何在故事板中设置滚动视图?
我的约束:
好的,让我们想象以下视图层次结构(请注意,如果您在 "Identity Inspector" 的 "Document" 部分中为这些视图指定唯一名称,则在 Interface Builder 中查看约束会更容易):
要设置它,您需要在 IB 中添加以下约束(我打算用 VFL 编写它,因为这是显示约束的一种非常简洁的方式):
显然,相对于它的父视图(主视图,在这个例子中)定义滚动视图:
H:|[scrollView]| V:|[scrollView]|
定义,
contentView
使得它的宽度与主视图相同(
==view
),并且滚动视图的
contentSize
将更改以适应contentView
的大小。根据 TN2154,滚动视图及其子视图之间的约束定义了滚动视图的contentSize
,而不是子视图的相对大小。
因此:
H:|[contentView(==view)]| V:|[contentView]|
定义三个标签的布局,使它们在
范围内偏移contentView
:H:|-[label1]-| H:|-[label2]-| H:|-[label3]-|
与其硬编码
contentView
的高度(以及滚动视图的contentSize
,不如定义标签与 [= 的垂直高度的关系15=],它(由于上面的第 2 步)调整滚动视图contentSize
的垂直高度:V:|-[label1]-[label2]-[label3]-|
这就是您需要做的全部。我没有对任何宽度进行硬编码(主视图自动具有宽度,滚动视图,更重要的是 contentView
定义了与此相关的宽度。但是标签宽度是从 contentView
,并且 contentView
高度(以及滚动视图的 contentSize
)是从三个标签的固有高度推断出来的。
最终结果是 IB 中的约束如下所示:
仅供参考,如果您想进行一些诊断,您可以在模拟器上 运行 应用程序时单击查看调试按钮:
您可以查看视图(以及可选的约束)并确保一切正常:
您还可以通过 (lldb)
提示查看 _autolayoutTrace
:
(lldb) po [[UIWindow keyWindow] _autolayoutTrace]
UIWindow:0x7fbbb3617910
| •UIView:0x7fbbb349a840
| | *UIScrollView:0x7fbbb3491c80
| | | *UIView:0x7fbbb348e180
| | | | *UILabel:0x7fbbb348e450'Label'
| | | | *UILabel:0x7fbbb3490670'Label'
| | | | *UILabel:0x7fbbb3490a70'Label'
| | | UIImageView:0x7fbbb34a3eb0
| | | UIImageView:0x7fbbb34a3800
| | *_UILayoutGuide:0x7fbbb349a970
| | *_UILayoutGuide:0x7fbbb349b460
这确认没有布局冲突,也没有模棱两可的布局。