我一直在寻找一个(工作)教程的日子,甚至是一个使用UIScrollView垂直滚动的示例应用程序,这是编程的。有很多关于使用故事板的教程,让我不知所措。
我查看了苹果的文档,他们的“指南”仍然没有一个可靠的例子或提示从哪里开始。
到目前为止,我所做的是做了以下一些事情。
直接在班级
中将我的视图设为滚动视图let scrollView = UIScrollView(frame: UIScreen.mainScreen().bounds)
然后将其分配给viewDidLoad函数中的视图
self.view = scollView
尝试更改内容大小。
self.scrollView.contentSize = CGSize(width:2000, height: 5678)
尝试使用
启用滚动scrollView.scrollEnabled = true
以编程方式执行此操作时可以找到的最后一个建议
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
scrollView.frame = view.bounds
}
目前我没有尝试开始将我的对象添加到scrollview,(我不需要缩放,只需要进行垂直滚动),但我没有设法得到任何工作:(事实上,正在运行这些添加的应用程序只会导致UIProblems,屏幕向上移动奇怪,它不适合我的屏幕的整个宽度?我尝试修复使框架边界等于宽度,但仍然无法正常工作
我没有收到任何错误。
我很想看到一个可以垂直滚动的示例viewcontroller!或任何帮助将非常感谢!
编辑了灾难的屏幕截图,试图让我的视图可滚动导致。
http://i.stack.imgur.com/gQ0SC.png
(链接而不是图像,由于缺少直接放置图像的点。)
(我将滚动视图背景设置为红色,看看它是否显示正确。看起来似乎是这样。但我无法在任何地方滚动
正如评论中所建议的那样,我没有使用self.view = self.scrollview,而是尝试将scrollview添加为self.view的子视图,但没有取得积极的结果。
编辑2:
添加
scrollView.contentSize = CGSize(width:2000, height: 5678)
to viewDidLayoutSubviews,如下面的评论中所建议的那样,我的视图可以滚动!
然而,由于某种原因,我的布局仍然看起来像一个完整的混乱(它看起来应该是,在我可以滚动之前)。
这是我的topBar(蓝色)的示例约束,它应该占用整个水平空间。
self.scrollView.addConstraints(
NSLayoutConstraint.constraintsWithVisualFormat(
"H:|[topBar]|", options: nil, metrics: nil, views: viewsDictionary))
为什么这不起作用的任何想法?
答案 0 :(得分:8)
严格来说,我觉得问题就在下面。
self.view = scollView
应为self.view.addSubview(scollView)
然后在scrollview中添加所有标签,按钮等,然后给出内容大小。
内容大小是告诉scrollview滚动的参数。
将self.scrollView.contentSize = CGSize(width:2000, height: 5678)
放入viewDidLayoutSubviews
。
答案 1 :(得分:3)
Swift 4.2
我给出了使用自动布局滚动堆栈视图的简单完整示例。
所有视图都在代码中,不需要故事板。
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(scrollView)
scrollView.addSubview(scrollViewContainer)
scrollViewContainer.addArrangedSubview(redView)
scrollViewContainer.addArrangedSubview(blueView)
scrollViewContainer.addArrangedSubview(greenView)
scrollView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
scrollView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
scrollViewContainer.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
scrollViewContainer.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
scrollViewContainer.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
scrollViewContainer.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true
// this is important for scrolling
scrollViewContainer.widthAnchor.constraint(equalTo: scrollView.widthAnchor).isActive = true
}
let scrollView: UIScrollView = {
let scrollView = UIScrollView()
scrollView.translatesAutoresizingMaskIntoConstraints = false
return scrollView
}()
let scrollViewContainer: UIStackView = {
let view = UIStackView()
view.axis = .vertical
view.spacing = 10
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
let redView: UIView = {
let view = UIView()
view.heightAnchor.constraint(equalToConstant: 500).isActive = true
view.backgroundColor = .red
return view
}()
let blueView: UIView = {
let view = UIView()
view.heightAnchor.constraint(equalToConstant: 200).isActive = true
view.backgroundColor = .blue
return view
}()
let greenView: UIView = {
let view = UIView()
view.heightAnchor.constraint(equalToConstant: 1200).isActive = true
view.backgroundColor = .green
return view
}()
}
希望获得帮助!