就在我以为我已经弄明白的时候......我遇到了这个问题。
情景。
我有一个简单的tableView。以及导航项目titleView中的搜索栏。 SearchBar通过视图控制器工具栏中的uibarbuttonitem添加到navItems titleView。
现在,通常是
使用[beginResponder]启动搜索栏后,键盘显示出来。它发出一个通知“KeyboardDidShow”,这是我计算UIKeyboard的高度并相应地设置tableView的高度(缩短它)。
ON旋转 - 来回横向/纵向,一切正常。 - (void)didRotateInferfaceOrientation被调用,而且每个人都被称为kool。
这是问题所在。
当键盘处于活动状态时,它有一个Google“搜索”按钮,这会推送到新视图 - webviewcontroller。
问题是,这个何时,[PORTRAIT] ViewController [SearchBar键盘激活] - >点击搜索 - > [Portrait] WebViewController - >将设备方向更改为[横向] - > [Landscape] WebViewController更改为landscape --->问题在于,用户点击回到uiViewController [Landscape]
未调用方法-didRotatefromInterfaceOrientation。不知何故,tableView高度搞砸了。虽然视图旋转完美。
这里有什么东西我不见了..
非常感谢任何帮助。 .thanks
答案 0 :(得分:1)
当用户点击时,将不会调用-didRotatefromInterfaceOrientation。您需要在viewWillAppear中检查方向(或在从后面点击返回之前调用viewDidLoad),然后为所选方向调用正确的布局。
在你的所有(BOOL)shouldRotate ...方法中,你应该调用一个单独的方法来确保你的布局对于设备方向是正确的。
答案 1 :(得分:0)
你可以在viewWillAppear上手动调用didRotateFromInterfaceOrientation并自己传递一个方向(即[UIApplication sharedApplication] .statusBarOrientation)。
答案 2 :(得分:0)
我最近在我的一个应用程序中遇到了类似的问题,不完全是我们的问题,但不要打扰,你应该看看我正在寻找的东西:我想简单地旋转使用presentModalViewController显示的viewController ...不幸的是它并没有真正起作用,尤其是在iOS 4之前使用OS的旧版iPhone ...所以我需要以编程方式进行旋转!只需获取您的屏幕尺寸,使用CGAffineTransform或类似的东西并更改尺寸然后您应该完成... 如果您有兴趣我可以发布一堆代码,请告诉我!
编辑:
UIScreen *screen = [UIScreen mainScreen];
myController.view.bounds = CGRectMake(0, 0, screen.bounds.size.height, screen.bounds.size.width - 20);
if(currentOrientation == UIDeviceOrientationLandscapeRight){
myController.view.transform = CGAffineTransformConcat(myController.view.transform, CGAffineTransformMakeRotation(degreesToRadian(-90)));
}else{
myController.view.transform = CGAffineTransformConcat(myController.view.transform, CGAffineTransformMakeRotation(degreesToRadian(90)));
}
myController.view.center = window.center;
[[UIApplication sharedApplication] setStatusBarOrientation:currentOrientation];
[self.window addSubview:self.tabBarController.view];
[self.window bringSubviewToFront:self.tabBarController.view];
[self.window addSubview:myController.view];
[self.window bringSubviewToFront:myController.view];
[self.tabBarController.view removeFromSuperview];`
这还包括在旋转到横向时移除TabBar以获得更多空间...享受:)