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