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的主要内容,如果未能解决你的问题,请参考以下文章

swift 3.0中的UITableView错误

Swift 3 中的错误处理

swift 3 和 Xcode 8 中的完成处理程序错误

Swift 3 中的“模糊引用”错误

swift 3中的错误UIScrollView

swift 3.0中的索引超出范围错误