swift 3中的错误UIScrollView
Posted
技术标签:
【中文标题】swift 3中的错误UIScrollView【英文标题】:Error UIScrollView in swift 3 【发布时间】:2017-08-28 03:42:52 【问题描述】:我有一个由图像、带有 11 个 UITextfield 的表单和一个按钮组成的视图,但是该表单对于我的屏幕来说太大了,这就是我尝试使用 UIScrollview 的原因。
我的错误是我的 UIScrollview 不起作用,因为我可以解决这个问题。
这是我的代码:
import UIKit
class LoginCtrl: UIViewController
let scrollView: UIScrollView =
let sv = UIScrollView(frame: UIScreen.main.bounds)
sv.isScrollEnabled = true
sv.contentSize = CGSize(width: 2000, height: 5678)
sv.translatesAutoresizingMaskIntoConstraints = false
return sv
()
override func viewDidLoad()
super.viewDidLoad()
view.backgroundColor = UIColor(r: 0, g: 150, b: 136)
self.view.addSubview(scrollView)
scrollView.addSubview(contenedorCampos)
setear_posicion_scrollView()
setear_posicion_contenedor()
func setear_posicion_scrollView()
//definir x,y,width,height constraints
scrollView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
scrollView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
scrollView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
var heightContenedor: NSLayoutConstraint?
func setear_posicion_contenedor()
//definir x,y,width,height constraints
contenedorCampos.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
contenedorCampos.topAnchor.constraint(equalTo: tabsInicio.bottomAnchor, constant: 12).isActive = true
contenedorCampos.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -24).isActive = true
heightContenedor = contenedorCampos.heightAnchor.constraint(equalToConstant: 400)
heightContenedor?.isActive = true
contenedorCampos.addSubview(txtNombres)
contenedorCampos.addSubview(divider_txtNombres)....
谢谢
【问题讨论】:
怎么办,我是新手 “我的 UIScrollview 不起作用”是什么意思?你有什么问题?另请出示您的真实代码,而不是摘录。 表示我的内容都是静态的,我会复制我所有的代码 @matt 我编辑了我的问题 "这意味着我的内容总是静态的" 这意味着您的滚动视图的contentSize
不大于滚动视图的大小。使用日志记录向自己证明这一事实
【参考方案1】:
您已经定义了滚动视图与其父视图之间的关系(定义了它的frame
),但没有定义了滚动视图与其子视图之间的关系(定义了它的contentSize
)。结果,滚动视图的实际contentSize
将只是(0, 0)
。
换句话说,您实际上从未布置过任何东西,至少没有在您发布的代码中。
您需要做的是为实际的子视图(滚动视图的子视图)定义布局约束。确保设置约束最终将这些组件固定到其父级(滚动视图)的边缘。一旦你充分定义了约束,滚动视图应该有一个内容大小。
Technical note about this
一般来说,自动布局会考虑顶部、左侧、底部和右侧 视图的边缘成为可见边缘。也就是说,如果您将视图固定到 它的超级视图的左边缘,你真的把它固定在 超级视图边界的最小 x 值。更改边界原点 父视图的位置不会改变视图的位置。
UIScrollView 类通过改变原点来滚动其内容 它的界限。为了使这项工作与自动布局一起使用,顶部、左侧、底部、 滚动视图中的右边缘现在意味着其内容的边缘 查看。
对滚动视图的子视图的约束必须导致 要填充的大小,然后将其解释为 滚动视图。 (这不应与 用于自动布局的 intrinsicContentSize 方法。)调整滚动的大小 具有自动布局的视图框架,约束必须是显式的 关于滚动视图的宽度和高度,或 滚动视图必须绑定到其子树之外的视图。
【讨论】:
以上是关于swift 3中的错误UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章