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



我有一个视图,我想填满顶部的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); 
    }];
}

这在纵向模式下工作正常,但在横向模式下,视图到处都是。我尝试在设备处于横向模式时切换宽度/高度,但无济于事。

我知道这是基本的东西,但我一直在努力理解如何正确调整视图以适应横向模式。

你应该使用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);

我刚刚尝试过,它在两个方向上都有效,希望对您有所帮助!

我之前的答案是在视图已经处于横向时解决问题。

如果您的问题是在移动到横向时,您的视图布局不适合您,请注册以下通知:

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

最新更新