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 回答