我有UIViewController(例如,loginVC),我试图在所有视图之上添加它的视图。
我尝试将此视图添加到AppDelegate
[[AppDelegate sharedDelegate].window addSubview:loginVC.view];
但在这种情况下,自动旋转不起作用,所以我尝试将此视图添加到NavigationController
的视图中。 NavigationController是rootViewController:
[[AppDelegate sharedDelegate].navigationController.view addSubview:loginVC.view];
它看起来很好并且自转,但它在旋转时有奇怪的行为。
开始旋转后,导航栏显示在loginVC.view的顶部,旋转结束时会在此视图后面显示,就像屏幕截图所示(我设置红色背景使其更加明显,背景为透明,看看这个观点背后的所有东西):
我尝试了什么:
我在stackoverflow上找到了这个:在旋转之前禁用UIView动画并在旋转后启用它们 - 看起来不太好,因为旋转没有动画发生(这有点明显)
尝试在旋转前隐藏navigationBar,并在旋转后使其可见,但在这种情况下,navigationBar会在loginVC.view上显示
接下来我要做的事 - 在AppDelegate的窗口上添加这个视图并手动处理旋转,但也许有更好的方法可以做到这一点?
UPD:
截图:
您可以在第二个屏幕截图中看到问题:导航栏位于顶部
答案 0 :(得分:0)
在uinavigationcontroller中添加你的viewController并推送uinavigationcontroller然后总是可以看到导航栏。
答案 1 :(得分:0)
我的朋友帮我解决了这个问题
以下是解决方案:
在AppDelegate中,我创建了UIWindow
属性:
//AppDelegate.h
@property (nonatomic, strong) UIWindow *loginWindow;
应用程序启动时初始化
//AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
....
self.loginWindow = [[UIWindow alloc] init];
self.loginWindow.windowLevel = UIWindowLevelStatusBar;
self.loginWindow.frame = [[UIScreen mainScreen] bounds];
self.loginWindow.backgroundColor = [UIColor clearColor];
....
return YES;
}
然后,在loginVC中:
@interface loginVC ()
@property (nonatomic, weak) UIWindow *loginWindow;
@end
@implementation
....
- (void)show {
// setting up loginVC view
if (!self.loginWindow) {
self.loginWindow = [[AppDelegate sharedDelegate] loginWindow];
}
if (![self.loginWindow.rootViewController isEqual:self]) {
[self.loginWindow setRootViewController:self];
}
self.loginWindow.hidden = NO;
//UPD:
//[self.loginWindow makeKeyAndVisible];
//UPD2:
[self.loginWindow makeKeyWindow];
}
- (void)hide {
// hiding view and stuff
[[[AppDelegate sharedDelegate] loginWindow] setHidden:YES];
//UPD:
//[[[AppDelegate sharedDelegate] window] makeKeyAndVisible];
//UPD2:
[[[AppDelegate sharedDelegate] window] makeKeyWindow];
}
@end
<强> UPD:强>
无需使用UIWindow的makeKeyAndVisible
方法,第二个窗口将始终位于第一个窗口之上。
<强> UPD2:强>
再次更新我的答案,也许对某人有用。
没有makeKeyAndVisible
我无法使用UITestField
,因此我取消注释该代码并面临另一个问题:
我有UIViewController
,在此控制器中创建另一个UIViewController
的实例并调用[self presentViewController:...]
。在提交UIViewController
时,我正在创建loginVC
,但是当我致电
[[[AppDelegate sharedDelegate] window] makeKeyAndVisible];
呈现的viewController消失,但第一个视图控制器仍然将此控制器设为presentedViewController
,因此我无法呈现其他视图控制器。
我的解决方案是makeKeyAndVisible
上的更改makeKeyWindow
。