0

上部のUIToolbarと下部のキーボードの間の画面全体を埋めたいビューがあります。UIKeyboardWillShowNotificationキーボードが表示されたことを検出するメッセージをリッスンしており、以下を使用してビューを調整しています。

- (void)keyboardWillShow:(NSNotification*)notification {

    NSDictionary* userInfo = [notification userInfo];

    CGSize keyboardSize = [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue].size;

    [UIView animateWithDuration:0.3f animations:^{

        subview.frame = CGRectMake(subview.frame.origin.x, subview.frame.origin.y, self.view.frame.size.width - 40, self.view.frame.size.height - 62 - keyboardSize.height - 20); 
    }];
}

これはポートレートモードでは問題なく機能しますが、ランドスケープではビューがいたるところにあります。デバイスが横向きモードのときに幅/高さを無効に切り替えてみました。

これが基本的なことであることは知っていますが、ランドスケープモード用にビューを正しく調整する方法を理解するのにいつも苦労していました。

4

2 に答える 2

1

あなたは使用する必要があります CGSize screenSize=[[UIScreen mainScreen] bounds].size;

次に交換し、

subview.frame = CGRectMake(subview.frame.origin.x,
subview.frame.origin.y, self.view.frame.size.width - 40,
self.view.frame.size.height - 62 - keyboardSize.height - 20);

この行で:

subview.frame = CGRectMake(0,
subview.frame.origin.y, screenSize.width, screenSize.height - subview.frame.origin.y
- keyboardSize.height - 20);

試したところ、双方向で機能しました。お役に立てば幸いです。

于 2012-06-12T12:09:15.263 に答える
0

私の以前の答えは、ビューがすでに横向きになっているときに問題を解決することでした。

横向きに移動するときにビューレイアウトが適切でないことが問題である場合は、次の通知に登録してください。

UIDeviceOrientationDidChangeNotification

次に、レシーバーメソッドに次のようなものがあります。

 - (void)orientationDidChange:(NSNotification*)notification { 
    CGSize screenSize=[[UIScreen mainScreen] bounds].size; 
    CGSize keyboardSize =[myKeyboard frame].size;

        subview.frame = CGRectMake(0, subview.frame.origin.y,
        screenSize.width, screenSize.height - subview.frame.origin.y -
        keyboardSize.height - 20); 
    }
于 2012-06-12T16:06:18.877 に答える