我有一个视图,我希望在顶部的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);
}];
}
这在纵向模式下工作正常但在景观中视图遍布整个地方。我尝试在设备处于横向模式时切换宽度/高度无效。
我知道这是基本的东西,但我一直很难理解如何正确调整景观模式的视图。
答案 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);
}