错误UIScrollView在SWIFT 3

问题描述:

我有一个视图,它是由一个图像,一个带有11个UITextfield和一个按钮的窗体组成,但窗体对于我的屏幕来说太大了,这就是为什么我尝试使用UIScrollview的原因。错误UIScrollView在SWIFT 3

我的错误是我的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).... 
    } 
} 

感谢

+0

我该怎么办,我是这个新人 –

+0

“我的UIScrollview不起作用”甚至是什么意思?你有什么问题?也请显示您的真实代码,而不是摘录。 – matt

+0

这意味着我的内容总是静态的,我将复制我所有的代码 –

您已经定义了滚动和它的父(定义其frame)之间的关系,而不是滚动视图和它的子视图之间的关系(它定义了它的contentSize)。因此,scrollview的实际contentSize将只是(0, 0)

换句话说,你从来没有真正布置过任何东西,至少在你发布的代码中没有。

您需要做的是为实际的子视图(即滚动视图的子视图的所有内容)定义布局约束。确保设置约束,将这些组件固定在其父项的边缘(滚动视图)。一旦你已经充分定义了约束,滚动视图应该有一个内容大小。

Technical note about this

一般而言,自动布局考虑顶部,左边,底部,和右边视图的 边缘是可见的边缘。也就是说,如果您将其视图的顶视图的左边缘设置为 ,那么您确实将其视为超级视图界限的最小x值的 。更改超级视图的边界原点 不会更改视图的位置。

UIScrollView类通过更改 其边界的原点来滚动其内容。要使用“自动布局”进行此项工作,滚动视图中的顶部,左侧,底部和右侧边缘现在意味着其内容的边缘 视图。

对滚动视图的子视图的约束必须导致要填充的大小为 ,然后将其解释为滚动视图的内容大小。 (这不应该与用于自动布局的 intrinsicContentSize方法相混淆。)要大小滚动 视图与自动布局框,约束必须是明确的 关于滚动视图的宽度和高度,或 的边缘滚动视图必须绑定到其子视图之外的视图。