当用户点击UITextField时,键盘将出现。我向上滚动UITextField使其位于键盘上方。在iPhone上运行正常:
- (void) someWhere
{
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(onKeyboardShow:)
name:UIKeyboardWillShowNotification
object:nil];
}
- (void) onKeyboardShow:(NSNotification *)notification
{
CGRect keyboardRect = [[[notification userInfo]
objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue
];
if (keyboardRect.size.height >= IPAD_KEYBOARD_PORTRAIT_HEIGHT) {
self.containerView.y = self.containerView.y - keyboardRect.size.width;
} else {
self.containerView.y = self.containerView.y - keyboardRect.size.height;
}
}
但是,它在iPad上已损坏。在iPad上,模态视图 Controller 可以显示为仅占据屏幕一部分的表格。您会看到最后一个UITextField与iPad上的键盘之间存在间隙。
UINavigationController* nav = [[UINavigationController alloc]
initWithRootViewController:someRootViewController];
nav.modalPresentationStyle = UIModalPresentationFormSheet;
[self presentViewController:nav animated:YES completion:nil];
我需要从屏幕底部检测模态视图的偏移并将其添加到UITextField的Y坐标。这将使UITextField与键盘顶部齐平。通过一些逆向工程,我遍历了未记录的 View 层次结构,从而获得了模态视图的框架:
- (void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
// describe is a category function on UIView that prints out the frame
[self.viewController.view.superview.superview.superview.superview describe];
}
最后,要从屏幕底部获取模态视图的偏移量,请执行以下操作:
UIView* modalView = self.viewController.view.superview.superview.superview.superview;
// usage of self-explanatory UIView category methods
CGFloat bottomOffset = modalView.superview.height - (modalView.y + modalView.height);
令我烦恼的是,这仅适用于纵向模式。由于某种原因,无论iPad处于什么方向,模态视图的 super View 始终固定在768的宽度和1024的高度。因此,这是我寻求帮助的地方。在iPad上,无论方向如何,如何可靠地获取模态视图与屏幕底部的偏移量?
最佳答案
我看到两种可能的解决方案:
inputAccessoryView
将文本字段自动附加到键盘。 就像是:
CGRect rectInWindowCoordinates = [self.containerView.window convertRect:keyboardRect fromWindow:nil];
CGRect rectCoveredByKeyboard = [self.containerView.superview convertRect:rectInWindowCoordinates fromView:nil];
CGFloat top = CGRectGetMinY(rectCoveredByKeyboard);
self.containerView.y = top - self.containerView.frame.size.height;
关于ios - 如何在iPad上计算模态视图的底部偏移?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18776275/