2013-02-09 4 views
7

UITextView - это представление режима просмотра модального контроллера. Мне нужно уменьшить высоту UITextView, когда клавиатура появляется, чтобы координата нижнего края y UITextView была равна верхней координате клавиатуры. I'getting высота клавиатурыUIModalPresentationFormSheet на iPad. Как настроить высоту UITextView при появлении клавиатуры

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; 

Проблема заключается в том, что этот вид модального подпрыгивает, когда появляется клавиатура. Как вычислить верхнюю границу границы клавиатуры в этом случае?

ответ

4

Вы можете сделать это:

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]; 
    } 

Не забудьте отменить для уведомлений.

+0

С тех пор, как я создал вопрос, многое произошло. В любом случае, спасибо за ответ. – Michael

0

Если вам не нужно писать код для этого самостоятельно, я рекомендую использовать https://github.com/hackiftekhar/IQKeyboardManager

Он отлично работает (для меня, до сих пор), и все, что вам нужно сделать, это импортировать его и добавить одну строку код в AppDelegate:

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

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

    return true 
} 
Смежные вопросы