2016-03-23 20 views
0

Bir iOS uygulaması için Swift kullanarak giriş ekranı oluşturmaya çalışıyorum. Klavyenin gizli kalmasını istemediğim şeydir.Klavye Bildirimleri'nde Görünüm Düzenini Değiştir (Swift, iOS)

Here. Kullanıcı bir metin alanına dokunduktan sonra, klavye ile birlikte this gibi görünmek istiyorum. Görebildiğiniz gibi, daha kompakt

Bunu kendi başıma yapmayı denedim, ancak 'u InterfaceBuilder kullanıyorum bu yana, çevrimiçi bulduğum örnekleri kullanarak bunu anlayamıyorum. Her şey UIScrollView içine gömülür.

Sorum şu: Bu doğru mu yapıyorum? Daha önce InterfaceBuilder'da ayarlanmış olan tüm kısıtlamaların kaldırılması ve ardından istediğim gibi görünmesi için programatik olarak yeniden programlanması.

Bunu yapmanın daha iyi bir yolu var mı? Bu sıkıcı görünüyor. Swift/iOS programlamasında yeniyim, bu yüzden bu açık bir soru ise özür dilerim. İşte

şimdiye kadar, benim yaptığım budur:


@IBOutlet weak var scrollView: UIScrollView! 
@IBOutlet weak var logoImage: UIImageView! 
@IBOutlet weak var logoText: UILabel! 
@IBOutlet weak var usernameTextField: UITextField! 
@IBOutlet weak var passwordTextField: UITextField! 
@IBOutlet weak var loginButton: UIButton! 
@IBOutlet weak var forgotPasswordButton: UIButton! 
@IBOutlet weak var createAccountButton: UIButton! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    registerForKeyboardNotifications() 
} 

func registerForKeyboardNotifications() { 
     let notificationCenter = NSNotificationCenter.defaultCenter() 
     notificationCenter.addObserver(self, selector: "keyboardWillBeShown:", name: UIKeyboardWillShowNotification, object: nil) 
     notificationCenter.addObserver(self, selector: "keyboardWillBeHidden:", name: UIKeyboardWillHideNotification, object: nil) 
} 

func keyboardWillBeShown(sender: NSNotification) { 
    let userInfo = sender.userInfo! 
    let keyboardHeight = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).CGRectValue().height 

    let screenSize: CGRect = UIScreen.mainScreen().bounds   // get screen size 
    let screenWidth = screenSize.width        // ... screen width 
    let screenHeight = screenSize.height       // ... screen height 
    let heightToFit = screenHeight - keyboardHeight     // ... height of screen with keyboard 

    self.view.translatesAutoresizingMaskIntoConstraints = false 

    self.view.removeConstraints(self.view.constraints) 

    self.view.addConstraint(
    NSLayoutConstraint(item: self.scrollView, 
        attribute: .Bottom, 
        relatedBy: .Equal, 
        toItem: self.view, 
        attribute: .Bottom, 
       multiplier: 1.0, 
        constant: -keyboardHeight)) 

    self.view.addConstraint(
    NSLayoutConstraint(item: self.scrollView, 
        attribute: .Top, 
        relatedBy: .Equal, 
        toItem: self.view, 
        attribute: .Top, 
       multiplier: 1.0, 
        constant: 0.0)) 


    self.view.addConstraint(
    NSLayoutConstraint(item: self.scrollView, 
        attribute: .Trailing, 
        relatedBy: .Equal, 
        toItem: self.view, 
        attribute: .Trailing, 
       multiplier: 1.0, 
        constant: 0.0)) 

    self.view.addConstraint(
    NSLayoutConstraint(item: self.scrollView, 
        attribute: .Leading, 
        relatedBy: .Equal, 
        toItem: self.view, 
        attribute: .Leading, 
       multiplier: 1.0, 
        constant: 0.0)) 

    self.view.addConstraint(
    NSLayoutConstraint(item: self.scrollView, 
        attribute: .Height, 
        relatedBy: .Equal, 
        toItem: nil, 
        attribute: .NotAnAttribute, 
       multiplier: 1.0, 
        constant: heightToFit)) 

    self.view.addConstraint(
    NSLayoutConstraint(item: self.view, 
        attribute: .Width, 
        relatedBy: .Equal, 
        toItem: nil, 
        attribute: .NotAnAttribute, 
       multiplier: 1.0, 
        constant: screenWidth)) 


    self.scrollView.setContentOffset(CGPointMake(0, self.usernameTextField.frame.origin.y - 50), animated: true) 
} 

func keyboardWillBeHidden(sender: NSNotification) { 
     let screenSize: CGRect = UIScreen.mainScreen().bounds   // get screen size 
     let screenWidth = screenSize.width        // ... screen width 
     let screenHeight = screenSize.height       // ... screen height 

     self.view.translatesAutoresizingMaskIntoConstraints = true 

     self.view.removeConstraints(self.view.constraints) 

     self.view.addConstraint(
      NSLayoutConstraint(item: self.scrollView, 
          attribute: .Bottom, 
          relatedBy: .Equal, 
          toItem: self.view, 
          attribute: .Bottom, 
         multiplier: 1.0, 
          constant: screenHeight)) 

     self.view.addConstraint(
      NSLayoutConstraint(item: self.scrollView, 
          attribute: .Top, 
          relatedBy: .Equal, 
          toItem: self.view, 
          attribute: .Top, 
         multiplier: 1.0, 
          constant: 0.0)) 

     self.view.addConstraint(
      NSLayoutConstraint(item: self.scrollView, 
          attribute: .Trailing, 
          relatedBy: .Equal, 
          toItem: self.view, 
          attribute: .Trailing, 
         multiplier: 1.0, 
          constant: 0.0)) 

     self.view.addConstraint(
      NSLayoutConstraint(item: self.scrollView, 
          attribute: .Leading, 
          relatedBy: .Equal, 
          toItem: self.view, 
          attribute: .Leading, 
         multiplier: 1.0, 
          constant: 0.0)) 

     self.view.addConstraint(
      NSLayoutConstraint(item: self.scrollView, 
          attribute: .Height, 
          relatedBy: .Equal, 
          toItem: nil, 
          attribute: .NotAnAttribute, 
         multiplier: 1.0, 
          constant: screenHeight)) 

     self.view.addConstraint(
      NSLayoutConstraint(item: self.view, 
          attribute: .Width, 
          relatedBy: .Equal, 
          toItem: nil, 
          attribute: .NotAnAttribute, 
         multiplier: 1.0, 
          constant: screenWidth)) 


    self.scrollView.setContentOffset(CGPointMake(0, -self.usernameTextField.frame.origin.y + 50), animated: true) 
} 
+0

Dağıtım hedef nedir:

Burada küçük bir pasajı mı? iOS 9 veya daha önce bir şey mi? –

+0

Bu iOS 9, Rob'dir. – aashah7

cevap

0

Maalesef, AutoLayoutConstraints ile çalışmaya başlayamadım, bu yüzden devre dışı bıraktım ve tüm matematiği kendim yaptım.

let screenSize: CGRect = UIScreen.mainScreen().bounds   // get screen size 
let screenWidth = screenSize.width        // ... screen width 
let screenHeight = screenSize.height       // ... screen height 
let padding: CGFloat = 30          // space on left and right 
let adjustedViewWidth = screenWidth - 2*padding 

self.scrollView.frame = CGRectMake(0, 0, screenWidth, screenHeight) 

self.logoImage.frame = CGRectMake(screenWidth/2 - self.logoImage.frame.width/2, self.logoImage.frame.origin.y, self.logoImage.frame.width, self.logoImage.frame.height) 
self.logoText.frame = CGRectMake(screenWidth/2 - self.logoText.frame.width/2, self.logoText.frame.origin.y, self.logoText.frame.width, self.logoText.frame.height) 
self.usernameTextField.frame = CGRectMake(screenWidth/2 - adjustedViewWidth/2, self.usernameTextField.frame.origin.y, adjustedViewWidth, self.usernameTextField.frame.height) 
self.passwordTextField.frame = CGRectMake(screenWidth/2 - adjustedViewWidth/2, self.passwordTextField.frame.origin.y, adjustedViewWidth, self.passwordTextField.frame.height) 
self.loginButton.frame = CGRectMake(screenWidth/2 - adjustedViewWidth/2, self.loginButton.frame.origin.y, adjustedViewWidth, self.loginButton.frame.height) 
+0

Hi @ aashah7, kısıtlamalar eklemeniz veya kaldırmanız gerekmiyor, çarpanları kullanarak istediğiniz çıkışı satın alabilirsiniz (UIImage, UILabel, UITextfield & UIButton). ve klavye yukarıdayken kaydırma görünümünün yükseklik sınırını değiştirerek. Görüntü görünümünün kısıtlamasının kaydırmalı görünümün üst kısmına bağlı olduğundan ve Şifreyi Unuttum görünümü kaydırma görünümünün altına bağlı olduğundan emin olun. –