6

UITextViewは、モーダルコントローラビューのサブビューです。UITextViewの下の境界線のy座標をキーボードの上のy座標と等しくするために、キーボードが表示されたときに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

2 に答える 2

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

通知の登録を忘れずに解除してください。

于 2015-05-14T18:49:28.180 に答える
0

このコードを自分で記述する必要がない場合は、https://github.com/hackiftekhar/IQKeyboardManagerを使用することをお勧めします

これはうまく機能し (これまでのところ、私にとっては)、必要なことはそれをインポートして、AppDelegate に次の 1 行のコードを追加することだけです。

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

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

    return true
}
于 2016-04-19T10:50:13.493 に答える