将 ScrollView 添加到现有视图
Add a ScrollView to existing View
我正在 Swift 2.0 中开发一个小应用程序。我有一个具有以下层次结构的视图:
现在,放置在该视图中的元素无法在其中完整显示,因此我想使用 ScrollView
以便能够滚动所有内容。
如何将我的 View
中的所有内容嵌入到新的 ScrollView
中?我可以通过代码以编程方式执行此操作吗?
更新:有一种更简单的方法可以做到这一点,我在发布此答案时并不知道
1) 转到故事板上的 viewcontroller 并单击其中的内容,然后按 Command + A
。这将 select 视图中的所有元素。
2) 转到 Editor -> Embed In -> Scroll View
。这会将所有标签、视图等嵌入到滚动视图中。
3) Select 您刚刚嵌入的 scrollview
。按 Control
并将其拖动到 viewcontroller 的相应 class 文件并创建一个出口 scrollView
.
4) 将此添加到您的 viewDidLoad()
scrollView.contentSize = CGSizeMake(self.view.frame.width, self.view.frame.height+100)
确保 contentSize 的高度大于视图的大小。
手动添加 SCROLLVIEW
1) 将对象库中的 scrollview
拖放到情节提要中的 viewcontroller
上,并为您的程序创建一个出口 'scrollView'.
2) 单击您的 viewcontroller
并转到尺寸检查器并记下宽度和高度。
3) 点击您的 scrollview
并设置 width
和 height
与 viewcontroller
相同。并将 X
和 Y
值设置为 0
4) 点击scrollView
然后稍微往旁边拖一点
5) 按Command+A
到select包括scrollView
在内的所有元素。按 Command
然后点击 scrollView
去 select ScrollView
6)您现在将拥有除 scrollView
selected 之外的所有元素。现在单击并将它们拖到 scrollView 中。
7) 现在单击 scrollView
并在大小检查器中将 X
和 Y
值设置为 0。
8) 将此添加到您的 viewDidLoad()
scrollView.contentSize = CGSizeMake(self.view.frame.width, self.view.frame.height+100)
确保 contentSize 的高度大于视图的大小。
这应该会为您的视图创建一个滚动视图。某些元素 的位置可能略有不同 。您可以通过将它们移动到故事板上来轻松修复它们。
它甚至可以比 ebby94 的答案更简单。
1) 转到故事板上的 viewcontroller 并单击其中的内容并按 Command + A。这将 select 视图中的所有元素。
2) 转到编辑器 -> 嵌入 -> 滚动视图。这会将所有标签、视图等嵌入到滚动视图中。
3) 将滚动视图的约束设置为视图的边缘。
你可以开始了!不需要插座。
选择所有元素并嵌入滚动视图(编辑器->嵌入->scrollView)工作正常。
通过选择约束警告(添加缺少的约束),添加约束要容易得多。
我遇到了同样的问题。我需要将滚动视图添加到现有的 view.But 我的主容器视图中有很多视图。他们彼此相连。所以我很害怕。最后我做到了。下面给出的过程。
复制您的视图(根视图)。为此,首先 select 根视图然后按 Command + D
现在删除根视图里面的所有子视图视图
现在将滚动视图添加到根视图并将约束设置为 0,0,0,0
现在将复制的(您复制的)视图添加到滚动视图并将约束设置为 0,0,0,0 并设置您想要的高度。
设置复制视图的宽度与根视图的宽度相等。
现在 select viewController,去尺寸检查器,select 自由尺寸。然后设置您在重复视图中输入的高度。
你差不多完成了。现在您必须将子视图与您在 viewController class 中提供的出口或操作连接起来。
就是这样。
很简单。命令 A 和命令 X 到 StoryBoard 中的特定视图控制器。之后采取滚动视图。在滚动视图上,只取一个视图控制器视图高度和宽度等于滚动视图宽度的视图。再次执行命令 V 并重新排列约束。您的问题将得到解决。
如果您正在使用 Snapkit 或以编程方式创建。
class ScrollViewController: UIViewController {
lazy var contentViewSize = CGSize(width: self.view.frame.width, height: self.view.frame.height + 320) //Step One
lazy var scrollView : UIScrollView = {
let view = UIScrollView(frame : .zero)
view.frame = self.view.bounds
view.contentInsetAdjustmentBehavior = .never
view.contentSize = contentViewSize
view.backgroundColor = .white
return view
}()
lazy var containerView : UIView = {
let view = UIView()
view.frame.size = contentViewSize
view.backgroundColor = .white
return view
}()
override func viewDidLoad() {
self.view.addSubview(scrollView)
self.scrollView.addSubview(containerView)
//Now Set Add your Constraints in the container View.
}
}
以上接受的答案解释足以实现滚动视图,但我更愿意以编程方式创建我的完整应用程序,并且我不在我的项目中使用故事板。此代码适用于不喜欢使用故事板的人。
解释
第一步:确定您的内容大小。在这里,我采用精确宽度并在屏幕高度上再增加 320。
第二步:创建滚动视图并添加滚动视图的期望行为。现在,滚动视图的 contentSize 应该与您在上面的第一步中创建的 contentSize 相同。
按照第一步和第二步。您将能够在视图顶部设置滚动视图。但是如果你想添加一个拉伸行为那么你应该按照第三步
第三步: 创建一个容器视图,其大小与您在第一步中计算的 contentView 相同,并将其设置为容器视图的框架。通过这样做,您将能够在屏幕上实现拉伸页眉和页脚行为。
请阅读确保按照设置的相同顺序添加约束。
回答欢迎修改。
我正在 Swift 2.0 中开发一个小应用程序。我有一个具有以下层次结构的视图:
现在,放置在该视图中的元素无法在其中完整显示,因此我想使用 ScrollView
以便能够滚动所有内容。
如何将我的 View
中的所有内容嵌入到新的 ScrollView
中?我可以通过代码以编程方式执行此操作吗?
更新:有一种更简单的方法可以做到这一点,我在发布此答案时并不知道
1) 转到故事板上的 viewcontroller 并单击其中的内容,然后按 Command + A
。这将 select 视图中的所有元素。
2) 转到 Editor -> Embed In -> Scroll View
。这会将所有标签、视图等嵌入到滚动视图中。
3) Select 您刚刚嵌入的 scrollview
。按 Control
并将其拖动到 viewcontroller 的相应 class 文件并创建一个出口 scrollView
.
4) 将此添加到您的 viewDidLoad()
scrollView.contentSize = CGSizeMake(self.view.frame.width, self.view.frame.height+100)
确保 contentSize 的高度大于视图的大小。
手动添加 SCROLLVIEW
1) 将对象库中的 scrollview
拖放到情节提要中的 viewcontroller
上,并为您的程序创建一个出口 'scrollView'.
2) 单击您的 viewcontroller
并转到尺寸检查器并记下宽度和高度。
3) 点击您的 scrollview
并设置 width
和 height
与 viewcontroller
相同。并将 X
和 Y
值设置为 0
4) 点击scrollView
然后稍微往旁边拖一点
5) 按Command+A
到select包括scrollView
在内的所有元素。按 Command
然后点击 scrollView
去 select ScrollView
6)您现在将拥有除 scrollView
selected 之外的所有元素。现在单击并将它们拖到 scrollView 中。
7) 现在单击 scrollView
并在大小检查器中将 X
和 Y
值设置为 0。
8) 将此添加到您的 viewDidLoad()
scrollView.contentSize = CGSizeMake(self.view.frame.width, self.view.frame.height+100)
确保 contentSize 的高度大于视图的大小。
这应该会为您的视图创建一个滚动视图。某些元素 的位置可能略有不同 。您可以通过将它们移动到故事板上来轻松修复它们。
它甚至可以比 ebby94 的答案更简单。
1) 转到故事板上的 viewcontroller 并单击其中的内容并按 Command + A。这将 select 视图中的所有元素。
2) 转到编辑器 -> 嵌入 -> 滚动视图。这会将所有标签、视图等嵌入到滚动视图中。
3) 将滚动视图的约束设置为视图的边缘。
你可以开始了!不需要插座。
选择所有元素并嵌入滚动视图(编辑器->嵌入->scrollView)工作正常。
通过选择约束警告(添加缺少的约束),添加约束要容易得多。
我遇到了同样的问题。我需要将滚动视图添加到现有的 view.But 我的主容器视图中有很多视图。他们彼此相连。所以我很害怕。最后我做到了。下面给出的过程。
复制您的视图(根视图)。为此,首先 select 根视图然后按 Command + D
现在删除根视图里面的所有子视图视图
现在将滚动视图添加到根视图并将约束设置为 0,0,0,0
现在将复制的(您复制的)视图添加到滚动视图并将约束设置为 0,0,0,0 并设置您想要的高度。
设置复制视图的宽度与根视图的宽度相等。
现在 select viewController,去尺寸检查器,select 自由尺寸。然后设置您在重复视图中输入的高度。
你差不多完成了。现在您必须将子视图与您在 viewController class 中提供的出口或操作连接起来。
就是这样。
很简单。命令 A 和命令 X 到 StoryBoard 中的特定视图控制器。之后采取滚动视图。在滚动视图上,只取一个视图控制器视图高度和宽度等于滚动视图宽度的视图。再次执行命令 V 并重新排列约束。您的问题将得到解决。
如果您正在使用 Snapkit 或以编程方式创建。
class ScrollViewController: UIViewController {
lazy var contentViewSize = CGSize(width: self.view.frame.width, height: self.view.frame.height + 320) //Step One
lazy var scrollView : UIScrollView = {
let view = UIScrollView(frame : .zero)
view.frame = self.view.bounds
view.contentInsetAdjustmentBehavior = .never
view.contentSize = contentViewSize
view.backgroundColor = .white
return view
}()
lazy var containerView : UIView = {
let view = UIView()
view.frame.size = contentViewSize
view.backgroundColor = .white
return view
}()
override func viewDidLoad() {
self.view.addSubview(scrollView)
self.scrollView.addSubview(containerView)
//Now Set Add your Constraints in the container View.
}
}
以上接受的答案解释足以实现滚动视图,但我更愿意以编程方式创建我的完整应用程序,并且我不在我的项目中使用故事板。此代码适用于不喜欢使用故事板的人。
解释
第一步:确定您的内容大小。在这里,我采用精确宽度并在屏幕高度上再增加 320。
第二步:创建滚动视图并添加滚动视图的期望行为。现在,滚动视图的 contentSize 应该与您在上面的第一步中创建的 contentSize 相同。
按照第一步和第二步。您将能够在视图顶部设置滚动视图。但是如果你想添加一个拉伸行为那么你应该按照第三步
第三步: 创建一个容器视图,其大小与您在第一步中计算的 contentView 相同,并将其设置为容器视图的框架。通过这样做,您将能够在屏幕上实现拉伸页眉和页脚行为。
请阅读确保按照设置的相同顺序添加约束。
回答欢迎修改。