调整视图大小以填充UIToolbar和键盘之间的剩余空间

时间:2012-06-12 11:56:28

标签: iphone objective-c cocoa-touch

我有一个视图,我希望在顶部的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); 
    }];
}

这在纵向模式下工作正常但在景观中视图遍布整个地方。我尝试在设备处于横向模式时切换宽度/高度无效。

我知道这是基本的东西,但我一直很难理解如何正确调整景观模式的视图。

2 个答案:

答案 0 :(得分: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);

我只是尝试了它并且它在两个方向都有效,希望它有所帮助!

答案 1 :(得分: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); 
    }