Ios MailComposer关闭后,状态栏位于navigationBar的顶部
问题:在我将Ios MailComposer关闭后,状态栏位于navigationBar的顶部,ios,objective-c,user-interface,uinavigationbar,statusbar,Ios,Objective C,User Interface,Uinavigationbar,Statusbar,问题:在我将MFMailComposerViewController显示为模式视图并将其取消后,我的状态栏出现在navigationBar的顶部 -(IBAction)openMail:(id)sender { MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init]; mc.mailComposeDelegate = self; [mc setSubject:emailTi
MFMailComposerViewController
显示为模式视图并将其取消后,我的状态栏出现在navigationBar
的顶部
-(IBAction)openMail:(id)sender
{
MFMailComposeViewController *mc = [[MFMailComposeViewController alloc] init];
mc.mailComposeDelegate = self;
[mc setSubject:emailTitle];
[mc setMessageBody:messageBody isHTML:YES];
[mc setToRecipients:toRecipents];
[mc.navigationItem.leftBarButtonItem setTintColor:[UIColor colorWithRed:144/255.0f green:5/255.0f blue:5/255.0f alpha:1.0f]];
[self presentViewController:mc animated:YES completion:NULL];
}
- (void) mailComposeController:(MFMailComposeViewController *)controller didFinishWithResult:(MFMailComposeResult)result error:(NSError *)error
{
switch (result)
{
case MFMailComposeResultCancelled:
NSLog(@"Mail cancelled");
break;
case MFMailComposeResultSaved:
NSLog(@"Mail saved");
break;
case MFMailComposeResultSent:
NSLog(@"Mail sent");
break;
case MFMailComposeResultFailed:
NSLog(@"Mail sent failure: %@", [error localizedDescription]);
break;
default:
break;
}
// Reset background image for navigation bars
[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navigationBar.png"] forBarMetrics:UIBarMetricsDefault];
NSLog(@"%@",[GGStackPanel printFrameParams:self.view]);
// Close the Mail Interface
GGAppDelegate * appDel = [[UIApplication sharedApplication] delegate];
HHTabListController * contr = (HHTabListController*)appDel.viewController;
[contr setWantsFullScreenLayout:NO];
NSLog(@"%i",[contr wantsFullScreenLayout]);
[self dismissViewControllerAnimated:YES completion:NULL];
}
关于Stackoverflow,有两个类似的问题,但没有一个解决方案对我有用。
我已经试过:
我试着从AppDelegate演示和解聘,没有任何帮助
更改视图框架或导航栏框架是可行的,但我必须对我的应用程序中的所有其他视图执行相同的操作(有很多视图)。这将使我的整个应用程序依赖于这个小错误
截图
解雇MailComposer后:
wantsFullScreenLayout是一个复杂而不相关的东西。所有视图控制器都需要嵌入“布局”视图控制器(苹果UINavigationController、苹果的UITabBarController)中,或者完全实现“我应该有多大,我在哪里?”这一复杂逻辑 苹果决定在iOS 1.0中,你看到的iPhone主视图不是从0,0开始的。包含它的窗口从(0,0)开始,但被状态栏重叠 我认为这是一个令他们后悔的决定,当时这是有道理的,但从长远来看,它造成了很多错误 净影响是:
…显然,每次都要这样做很烦人。这就是为什么苹果公司强烈鼓励所有人使用UINavigationController和/或uitabarcontroller:)这种替代解决方案对于处理视图控制器以模式显示后顶部布局指南重新定位自身的奇怪行为也非常方便 将顶部间距约束添加到实际“视图”,而不是“顶部布局指南”。选择视图(当前距离…),如下面的屏幕截图所示:
礼貌:你能发布截图吗?MailComposer是全屏显示的吗?我不这么认为。我检查了self.WantFullScreenLayout的值,该值为否。我尝试使用self.WantFullScreenLayout,甚至尝试更改appDelegate.viewController和MailComposer的WantFullScreenLayout属性-->无更改。看起来主viewController的布局逻辑不正确。什么是“HHTabListController”?我使用HHTabListController作为超级viewController。我想要一个垂直的标签栏,就像Facebook应用程序一样。因此,我发现我想如果我将HHablistController的WantFullScreenLayout设置为NO,可能会解决问题,但显然不会。我想我需要更仔细地阅读Apple文档:)但无论如何,这确实有帮助。我还想知道是否应该通过将rootController的视图框上移20像素来将其移回原位,因此HHTabController的其他子视图不会下移,但似乎其他视图根本不会受到影响,即使我多次调用MailComposer(这会触发上面的重新定位代码)。你知道为什么吗?要了解其他视图发生了什么,你需要仔细检查屏幕上每个视图的runtime.frame和.bounds-任何父视图都可能会自动更正其子视图的值。
UIViewController* rootController = // in this case HHTabController?
UIView* rootView = rootController.view;
CGRect frame = rootView.frame;
CGPoint oldOrigin = frame.origin;
CGPoint newOrigin = // calculate this, according to Apple docs.
// in your current case, it should be: CGPointMake( 0, 20 );
frame.origin = newOrigin;
frame.size = CGSizeMake( frame.size.width - (newOrigin.x - oldOrigin.x), frame.size.height - (newOrigin.y - oldOrigin.y) );
rootView.frame = frame;