2017-06-14 11 views
1

私はUIViewに複数のUITextFieldを追加したプロジェクトに取り組んでいます。これはコンテナビューとして機能しています。次に、このコンテナビューをUIScrollViewに追加します。次に、これを画面のメインビューに追加します。問題は、私のコンテナのビューが画面に表示されますが、UIScrollViewにアタッチされているにもかかわらず、スクロールしないため、その理由がわかりません。すべてのコードと制約はSwiftにあります。以下は自動レイアウトの制約を追加しても、UIScrollViewはスクロールしません

私がこれまで持って関連するコードです:私はここで注意したい

private func setupViews() { 
     view.backgroundColor = .nzRedColor() 

     registerView.frame = CGRect(x: 0.0, y: 0.0, width: self.view.frame.width, height: self.view.frame.height) 
     registerView.backgroundColor = UIColor.green 

     registerScrollView.frame = CGRect(x: 0.0, y: 0.0, width: self.view.frame.width, height: 300.0) 
     registerScrollView.backgroundColor = UIColor.blue 


     let addViewsClosure = { (superview: UIView, views: UIView...)->() in 
      for view in views { 
       view.translatesAutoresizingMaskIntoConstraints = false 
       if ((view as? UIImageView) != nil) { 
        superview.addSubview(view) 
       } else if ((view as? UITextField) != nil) { 
        self.registerView.addSubview(view) 
        self.registerScrollView.addSubview(self.registerView) 
        superview.addSubview(self.registerScrollView) 
       } else { 
        superview.addSubview(view) 
       } 
      } 
     } 

     let customizeTextFields = { (textfields: UITextField...) in 
      for textfield in textfields { 
       textfield.backgroundColor = UIColor(white: 1.0, alpha: 0.3) 
       textfield.font = UIFont.systemFont(ofSize: 14, weight: UIFontWeightRegular) 
       textfield.layer.cornerRadius = 2.0 
      } 
     } 

     customizeTextFields(firstNameTextField, lastNameTextField, cityTextField, countryTextField, emailTextField, passwordTextField, passwordConfirmationTextField) 


     addViewsClosure(view, logoImageView, firstNameTextField, lastNameTextField, cityTextField, countryTextField, emailTextField, passwordTextField, passwordConfirmationTextField, registerButton, skipButton) 


     logoImageView.constrainTop(at: 50, after: topLayoutGuide.anchorableRepresentation) 
     logoImageView.constrainCenterHorizontally() 
     logoImageWidthConstraint = logoImageView.constrainWidth(at: 0) 
     logoImageHeightConstraint = logoImageView.constrainHeight(at: 0) 
     updateLogoImageSize() 


     firstNameTextField.constrainTop(at: 10, after: logoImageView) 
     firstNameTextField.constrainHeight(at: 50) 
     firstNameTextField.constrainLeading(alignedWith: view, offset: 10) 
     firstNameTextField.constrainTrailing(alignedWith: view, offset: -10) 

     lastNameTextField.constrainTop(at: 10, after: firstNameTextField) 
     lastNameTextField.constrainHeight(at: 50) 
     lastNameTextField.constrainLeading(alignedWith: firstNameTextField) 
     lastNameTextField.constrainTrailing(alignedWith: firstNameTextField) 

     cityTextField.constrainTop(at: 10, after: lastNameTextField) 
     cityTextField.constrainHeight(at: 50) 
     cityTextField.constrainLeading(alignedWith: firstNameTextField) 
     cityTextField.constrainTrailing(alignedWith: firstNameTextField) 

     countryTextField.constrainTop(at: 10, after: cityTextField) 
     countryTextField.constrainHeight(at: 50) 
     countryTextField.constrainLeading(alignedWith: firstNameTextField) 
     countryTextField.constrainTrailing(alignedWith: firstNameTextField) 

     emailTextField.constrainTop(at: 10, after: countryTextField) 
     emailTextField.constrainHeight(at: 50) 
     emailTextField.constrainLeading(alignedWith: firstNameTextField) 
     emailTextField.constrainTrailing(alignedWith: firstNameTextField) 

     passwordTextField.constrainTop(at: 10, after: emailTextField) 
     passwordTextField.constrainHeight(at: 50) 
     passwordTextField.constrainLeading(alignedWith: firstNameTextField) 
     passwordTextField.constrainTrailing(alignedWith: firstNameTextField) 

     passwordConfirmationTextField.constrainTop(at: 10, after: passwordTextField) 
     passwordConfirmationTextField.constrainHeight(at: 50) 
     passwordConfirmationTextField.constrainLeading(alignedWith: firstNameTextField) 
     passwordConfirmationTextField.constrainTrailing(alignedWith: firstNameTextField) 

     registerView.constrainTop(at: 0) 
     registerView.constrainHeight(at: self.view.frame.height) 
     registerView.constrainLeading(at: 0) 
     registerView.constrainTrailing(at: 0) 

     registerScrollView.constrainTop(at: 50, after: logoImageView) 
     registerScrollView.constrainHeight(at: 300.0) 
     registerScrollView.constrainLeading(at: 0) 
     registerScrollView.constrainTrailing(at: 0) 

     registerButton.constrainTop(at: 30, after: passwordConfirmationTextField) 
     registerButton.constrainHeight(at: 50) 
     registerButton.constrainLeading(alignedWith: firstNameTextField) 
     registerButton.constrainTrailing(alignedWith: firstNameTextField) 

     skipButton <- { $0.top >= registerButton.anchors.bottom + 12 } 
     skipButton.constrainBottom(at: 12) 
     skipButton.constrainCenterHorizontally() 
    } 

2つのこと:

  1. を私はregisterViewの背景色が "緑" であることを行うにもかかわらず、I表示されません。

  2. 何らかの理由で、すべてのUITextFieldが(その色が青であるため)UIScrollViewに直接表示され、UIScrollViewは表示されますが残念ながらスクロールできません。それは私が間違っていると誰が見ることができますか?

+1

最初の提案:新しいビュー/プロジェクトでこれを複製しようとしますが、おそらく2つのサブビューがあるため、何が起こっているのかを明確に調査できます。 – DonMag

答えて

2

スクロールビュー、スクロールビュー.contentSizeを定義するのコンテンツと自動レイアウトを使用。つまり、registerViewは、すべての制約が正しく設定されている必要があります。

registerViewの背景を緑に設定しましたが、表示されません。 .clipsToBoundstrueに設定すると、テキストフィールドが表示されなくなります。

registerView.constrainTop(at: 0) 
    registerView.constrainHeight(at: self.view.frame.height) 
    registerView.constrainLeading(at: 0) 
    registerView.constrainTrailing(at: 0) 

あなたはトップ、大手、トレーリングと高さの制約を設定している - しかし、あなたは幅とボトムを逃しているように見えます。

ボトム拘束は、おそらく0に設定する必要があります - トップ、リーディング、トレーリングのように。

私はあなたがほしいと思っていますregisterView最後のテキストフィールド - passwordConfirmationTextFieldによって高さの制約を決定することができますが、その場合でもまだそれが欠落しています。

+0

お返事ありがとうございました。あなたの提案に従った後、今私はregisterViewの緑色の背景色を見ることができます!しかし、私のtextFieldsはregisterViewでスクロールしていません。それらは、registerViewの背後にあるscrollViewに固定されているようです。私はそれらに関連する制約の問題を修正した後に、textFieldsが正しくスクロールすると仮定して正しいですか? – syedfa

+0

わかりません...デバッグ階層を使用してチェックすると、 'registerView'または' registerScrollView'のTextFieldsサブビューですか?そして、サイズが正しく表示されていますか? – DonMag

+0

textFieldsはregisterViewのサブビューであり、registerViewはscrollViewのサブビューです。残念ながら、textFieldのサイズが適切に表示されません。 – syedfa

関連する問題