2013-02-09 7 views
7

UITextView ist eine Unteransicht der Ansicht des modalen Controllers. Ich muss die UITextView-Höhe verringern, wenn die Tastatur angezeigt wird, damit die untere Y-Koordinate der UITextView der oberen y-Koordinate der Tastatur entspricht. I'getting TastaturhöheUIModalPresentationFormSheet auf dem iPad. So passen Sie die UITextView-Höhe an, wenn die Tastatur angezeigt wird

CGRect frameBegin = [[notification.userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue] ; 
CGRect frameEnd = [[notification.userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

CGRect resultBegin = [self.view convertRect:frameBegin fromView:nil]; 
CGRect resultEnd = [self.view convertRect:frameEnd fromView:nil]; 

CGFloat kbdHeight = resultBegin.origin.y - resultEnd.origin.y; 

Das Problem ist, dass diese modale Ansicht aufspringt, wenn Tastatur erscheint. Wie berechnet man in diesem Fall die obere Randkoordinate der Tastatur?

Antwort

4

Sie können dies tun:

1. Register for keyboard notifications: 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(myTextViewHeightAdjustMethod:) 
              name:UIKeyboardWillShowNotification 
              object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(myTextViewHeightAdjustMethod:) 
              name:UIKeyboardDidShowNotification 
              object:nil]; 

2. Calculate intersection and adjust textView height with the bottom constraint 

    - (void)myTextViewHeightAdjustMethod:(NSNotification *)notification 
    { 
     NSDictionary *userInfo = [notification userInfo]; 
     CGRect keyboardFinalFrame = [[userInfo emf_ObjectOrNilForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue]; 

     CGPoint keyboardOriginInView = [self.view convertPoint:keyboardFinalFrame.origin fromView:nil]; 

      CGFloat intersectionY = CGRectGetMaxY(self.view.frame) - keyboardOriginInView.y; 

      if (intersectionY >= 0) 
      { 
       self.textViewBottomConstraint.constant = intersectionY + originalTextViewBottomConstraint; 

       [self.textView setNeedsLayout]; 
    } 

Denken Sie daran, für Benachrichtigungen deregistrieren.

+0

Eine Menge Dinge passiert, seit ich die Frage erstellt. Wie auch immer, danke für die Antwort. – Michael

0

Wenn Sie nicht brauchen, um den Code für diese zu schreiben, selbst ich empfehlen https://github.com/hackiftekhar/IQKeyboardManager

Es funktioniert großartig (für mich, so weit) und alles, was Sie tun müssen, ist es zu importieren und fügen Sie diese eine Zeile Code in AppDelegate:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

    //Magic one-liner 
    IQKeyboardManager.sharedManager().enable = true 

    return true 
} 
Verwandte Themen