2017-08-28 100 views
-2

我有一個視圖,它是由一個圖像,一個帶有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

這意味着我的內容總是靜態的,我將複製我所有的代碼 –

回答

0

您已經定義了滾動和它的父(定義其frame)之間的關係,而不是滾動視圖和它的子視圖之間的關係(它定義了它的contentSize)。因此,scrollview的實際contentSize將只是(0, 0)

換句話說,你從來沒有真正佈置過任何東西,至少在你發佈的代碼中沒有。

您需要做的是爲實際的子視圖(即滾動視圖的子視圖的所有內容)定義佈局約束。確保設置約束,將這些組件固定在其父項的邊緣(滾動視圖)。一旦你已經充分定義了約束,滾動視圖應該有一個內容大小。

Technical note about this

一般而言,自動佈局考慮頂部,左邊,底部,和右邊視圖的 邊緣是可見的邊緣。也就是說,如果您將其視圖的頂視圖的左邊緣設置爲 ,那麼您確實將其視爲超級視圖界限的最小x值的 。更改超級視圖的邊界原點 不會更改視圖的位置。

UIScrollView類通過更改 其邊界的原點來滾動其內容。要使用「自動佈局」進行此項工作,滾動視圖中的頂部,左側,底部和右側邊緣現在意味着其內容的邊緣 視圖。

對滾動視圖的子視圖的約束必須導致要填充的大小爲 ,然後將其解釋爲滾動視圖的內容大小。 (這不應該與用於自動佈局的 intrinsicContentSize方法相混淆。)要大小滾動 視圖與自動佈局框,約束必須是明確的 關於滾動視圖的寬度和高度,或 的邊緣滾動視圖必須綁定到其子視圖之外的視圖。