Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IPhone-关闭模式视图控制器后-页面顶部留有间隙_Iphone_Objective C_Uikit_Uiviewcontroller_Model View Controller - Fatal编程技术网

IPhone-关闭模式视图控制器后-页面顶部留有间隙

IPhone-关闭模式视图控制器后-页面顶部留有间隙,iphone,objective-c,uikit,uiviewcontroller,model-view-controller,Iphone,Objective C,Uikit,Uiviewcontroller,Model View Controller,启动应用程序时,如果用户没有存储登录信息,我想显示一个模式视图控制器,强制输入此信息。通过反复试验,我发现这必须发生在我的根视图控制器的ViewDidDisplay中。我试着将它放在viewDidLoad和ViewWillDisplay中,但这些都不起作用,除非我将根视图控制器的视图指定给模式中使用的导航控制器的视图,这会导致其他问题 因此,我: - (void)viewDidAppear:(BOOL)animated { NewAccountViewController *newAc

启动应用程序时,如果用户没有存储登录信息,我想显示一个模式视图控制器,强制输入此信息。通过反复试验,我发现这必须发生在我的根视图控制器的ViewDidDisplay中。我试着将它放在viewDidLoad和ViewWillDisplay中,但这些都不起作用,除非我将根视图控制器的视图指定给模式中使用的导航控制器的视图,这会导致其他问题

因此,我:

- (void)viewDidAppear:(BOOL)animated
{
     NewAccountViewController *newAccountViewController = [[[NewAccountViewController alloc] initWithNibName:@"NewAccountViewController" bundle:nil] autorelease];

     UINavigationController *accountNavigationController = [[UINavigationController alloc] initWithRootViewController:newAccountViewController];
  [self presentModalViewController:accountNavigationController animated:YES];       
}
在newAccountViewController中,我有一个简单的导航项按钮,它使用dismissModalViewController解除模态视图控制器

self.view.frame = CGRectMake(0, 0, 320, 480);
这一切都起作用,当模式被取消时,导航控制器中的视图可见,其导航项标题位于顶部


但在状态栏和蓝色导航项栏顶部之间有一个与状态栏大小相同的白色间隙。如果我不做模态分析,那么差距就永远不会存在。它只在模态出现并消失后发生。我试过在“现在”和“解聘”两个控件上都使用动画:否。我也尝试过在模式中不使用导航控制器,但也没有效果。任何想法都会很棒!谢谢。

好的,我不知道为什么会发生这种情况,但它发生在我身上,我会告诉你我是如何修复它的。我发现在0,0处添加视图会使其与状态栏重叠…这很奇怪,因为在3.0之前,我从未让项目执行此操作。0,0始终位于状态栏下方。无论如何,我看到它是重叠的,所以我开始把我的视图放在0,20或者状态栏有多大。这很酷,直到我尝试使用模态视图控制器,当它关闭时,我发现了状态栏大小的间隙(您正在过期的内容),出于某种原因,模态视图认为0,0没有与状态栏重叠,当它关闭0,20(您以前的视图)时,显示为(0,0)没有超过圈和(0,20)有额外的白色间隙。为什么会这样?没有线索。无论如何,为了修复它,我知道我必须将视图和状态栏的整个重叠部分修复为0,0。我一直在尝试,但什么都没有,然后我决定尝试在xcode中创建一个新的基于视图的项目(为您设置初始视图),看看他们的视图是否重叠(或者如果他们将其设置为0,20),我发现它没有重叠,并且0,0是正确的位置,就在状态栏的正下方,没有重叠。比扎尔?我认为是这样。因此,我在我的项目中所做的是复制他们在新创建的基于视图的项目中的设置(他们通过Interface Builder设置ViewController属性,您可以像我一样创建基于视图的项目,并模仿他们的设置),我发现这解决了问题,0,0处的视图不再与状态栏重叠,解除模态视图控制器也不再留下间隙。我不知道这是否是你的情况,但它可能是,希望这将帮助你。

我遇到了同样的问题。不确定是什么原因导致了它,但在关闭模态视图后,我用以下代码行修复了它:

[self.view setFrame:CGRectMake(0, 10, self.view.frame.size.width, self.view.frame.size.height)];

只需调整Y偏移以满足您的需要。在另一个例子中,我不得不把它改为20而不是10

我也有同样的问题。我的解决方案是在切换视图之前暂时关闭状态栏:

- (void) temporarilyHideStatusBar {
  [[UIApplication sharedApplication] setStatusBarHidden:YES];
  [self performSelector:@selector(showStatusBar) withObject:nil afterDelay:0];
}
- (void) showStatusBar {
  [[UIApplication sharedApplication] setStatusBarHidden:NO];
}

// Use these by calling the hide function just before a broken view switch:
[self temporarilyHideStatusBar];
[self doViewSwitch];

// No need to call [self showStatusBar]; explicitly.
我尝试过其他基于代码的解决方案,我最喜欢这一个,因为它在100%的时间内都能工作——我的一些基于帧的解决方案在大部分时间都能工作——并且因为它的用户可见效果最小


我怀疑这是苹果的错误,如果能听到他们关于最佳解决方案的官方说法,那就太好了。

事实证明,这是因为我在当前视图控制器上调用了我的modalviewcontroller,但我的视图控制器已经加载了另一个视图控制器作为子视图。一旦我将其更改为子视图中的视图控制器,加载模态,然后它就消失了。谢谢你的帮助。

我遇到了同样的问题。我承认我可能走了一条非传统的路线,在导航控制器中嵌入了一个选项卡栏,现在我有点明白为什么他们说不这样做了。好吧,不管怎样,这对我的应用程序来说是有意义的,即使实施起来非常痛苦

我的问题是,一旦我将模式VC推到TabController子视图(这反过来又是总体NavController视图的子视图,它控制着顶部的NavBar…这会变成一个委派噩梦)上,然后关闭MVC,返回的视图就会被推到NavBar下。仅使用MVC添加或推送任何其他子视图时不会发生

如果我在[self dismissModal…]之后立即调用它,那么[self.view setFrame:(CGRect)]似乎确实起到了作用。但是,它必须在我的选项卡栏控制器的所有子视图上调用,甚至其他列表也要在该栏下分流。可怜的

使事情令人头痛,但并非无法解决。但我同意,这是3.x的一个新bug(或者它可能是那些双刃剑的“新特性”之一),而且非常烦人。我现在正在下载3.1.2SDK,希望它能解决这个问题。我要评论我的[setFrame]行,看看会发生什么。但希望,如果在这个版本中没有解决这个问题,它将很快得到解决。在此之前,解决方案似乎是大量(公认的黑客和重复)代码

编辑:不,更新没有帮助。大便。回到我的代码,来硬定义每个屏幕的位置。令人惊叹的。希望导航栏和标签栏的大小永远不会改变

编辑2:嘿!我解决了!(i R prowd.)似乎问题在于,当我的MVC被撤销时,我的视图被传递回选项卡栏控制器,而该控制器“忘记”了它上面有一个导航栏。别告诉我怎么做,我现在可能已经离开了有记录的领域。但是,我通过简单地重新定义[subview.view setFrame:0,0,width,
- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
    if (!willLeave)
        [[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];
    return YES;
}

- (void)bannerViewActionDidFinish:(ADBannerView *)banner
{
    [[UIApplication sharedApplication] setStatusBarHidden:NO animated:YES];
}
[self.view addSubview:self.viewController1.view]; // I suppose this layouts all (sub)views.
[self.viewController1.view removeFromSuperview]; 
    self.viewController1.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self.viewController2 presentModalViewController:self.viewController1 animated:YES];
self.view.frame = CGRectMake(0, 0, 320, 480);
- (void) moviePlayerLoadStateChanged:(NSNotification*)notification 
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}


- (void) moviePlayBackDidFinish:(NSNotification*)notification 
{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.

    TEGGameViewController *gameVC = [[TEGGameViewController alloc] init];

    self.window.rootViewController = gameVC;

    [self.window makeKeyAndVisible];
    return YES;
}