2012-03-20 71 views
9

我已經實現了iPhone的攝像頭的應用程序。 當用戶完成採摘自己的形象,狀態欄會重新出現! 我將如何確保狀態欄保持隱藏狀態?iPhone - 刪除狀態欄編程

這裏是我的代碼:

-(IBAction)pickImage:(id)sender { 
UIImagePickerController *picker = [[UIImagePickerController alloc] init]; 
picker.delegate = self; 

picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; 
[self presentModalViewController:picker animated:YES]; 
} 

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
[picker dismissModalViewControllerAnimated:YES]; 
background.image = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 

} 

如果我做錯什麼,請指出來! 謝謝, Rafee

+0

如果您設置狀態欄最初隱藏在你的應用程序info.plist中狀態欄將保持隱藏狀態。 – 2012-04-07 05:44:06

+1

不,狀態欄不會隱藏。我剛剛做了一個測試,這似乎是一個錯誤,那就是複製的100%(至少對我來說)上dismissModalViewController與類型UIImagePickerControllerSourceTypeSavedPhotosAlbum一個UIImagePicker。 Camera和PhotoLibrary不會發生這種情況。 – 2012-05-28 05:23:57

回答

29
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 

您可以選擇另一個動畫風格,如果在所有。

+0

在OPK中,實際上有一個UI正在經歷的錯誤。 – 2012-05-28 06:05:59

+0

完美地工作,與imagePicker – 2014-09-19 12:11:58

+0

在ios 9中已棄用相同的問題 – cdub 2015-10-06 08:46:56

0

似乎有與UIImagePicker相關聯的UIViewController的駁回機構中的錯誤,具有sourceType的= UIImagePickerControllerSourceTypeSavedPhotosAlbum。

調用dismissModalViewController(加上完成該方法的:)的UIApplication狀態欄隱藏財產瞬間從YES更改爲NO,它是在跨過解僱的那一刻繪製的那一刻...

這對於使用全屏視圖的應用程序來說只是非常明顯的。我現在的應用程序的項目呢,再加上我在演示前控制視圖控制器的視圖的框架,所以UIImagePicker是不是全屏。這使得這個bug非常明顯。我花了4-5個小時來確定原因,並且這是最終的確定結論,並且該錯誤不會發生在sourceType Camera或PhotoLibrary上。

所以,如果你想有一個完美的全屏應用程序,並希望呈現無缺陷的UIImagePicker,避免UIImagePickerControllerSourceTypeSavedPhotosAlbum

20

在iOS系統7,對UIViewController中,「prefersStatusBarHidden」的方法。顯示選擇器時

- (BOOL) prefersStatusBarHidden 
{ 
    return YES; 
} 
0

大中央調度是你的朋友,使用這種方法,你不會看到狀態欄出現在所有:要隱藏狀態欄,此方法添加到您的視圖控制器,並返回YES或之後

- (void)hideStatusBar 
{ 
    if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)]) 
    { 
     [self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)]; 
    } 
    [[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide]; 
} 

- (BOOL)prefersStatusBarHidden { 
    return YES; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    [self hideStatusBar]; 
    double delayInSeconds = 0.2; 
    dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); 
    dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 
     [self hideStatusBar]; 
    }); 
} 
4

在這種情況下,我們使用的是2個步驟

在第一步: 添加在info.plist中:「觀基於控制器的狀態欄外觀」與價值「NO」

在第二步:使用/調用此代碼的UIImagePickerController

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if([navigationController isKindOfClass:[UIImagePickerController class]]) 
     [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
} 
1

的代表與iOS 7或更高版本,可以使用下面的代碼隱藏和取消隱藏狀態欄,

@interface ViewController() 

@property (nonatomic, getter=isStatusBarHidden) BOOL statusBarHidden; 

@end 

@implementation ViewController 


    ... other codes 

- (BOOL)prefersStatusBarHidden { 
    return self.isStatusBarHidden; 
} 

- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation { 
    return UIStatusBarAnimationFade; 
} 

- (void)hideStatusBar { 
    self.statusBarHidden = YES; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 

- (void)showStatusBar { 
    self.statusBarHidden = NO; 
    [self setNeedsStatusBarAppearanceUpdate]; 
} 

@end