2012-06-12 42 views
0

我有一个视图,我想填充顶部的UIToolbar和底部的键盘之间的整个屏幕。我听了UIKeyboardWillShowNotification消息键盘出现时检测并使用以下调整视图:调整视图以填充UIToolbar和键盘之间的剩余空间

- (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

你有没有为子视图设置autoresizeMask? – Roshit

+0

我尝试过和没有,仍然没有在横向模式下工作 – JWood

回答

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

我只是想和它的工作在两个方向,希望它帮助!

+0

感谢您的提示,但它不适用于我。旋转到横向时,视图在屏幕左上角消失。我试着用autoresizeMask设置为none和灵活的宽度/高度。 – JWood

+0

嗨,伙计,让我明白你的问题:移动到风景后显示键盘时是否?或者当键盘可见时移动到风景? – user1451152

+0

键盘可见后转到横向。 – JWood

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

谢谢但问题依然存在。 keyboardWillShow:在旋转设备后调用,即使在横向模式下显示键盘时仍然会将视图从屏幕移开。 – JWood

+0

而不是新的答案只是编辑你的旧答案 –