IOS開発は初めてです。 UIImagePickerController
のステータスバーを非表示にしようとしています。 [写真を撮る]をクリックするたびに、ステータスバーが表示されます。隠れません。ステータスバーをUIImagePickerController
でのみ非表示にしたい。
これが私のコードです
- (IBAction)takePhoto:(UIButton *)sender
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentViewController:picker animated:YES completion:NULL];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self statusBar:YES];
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.imageView.image = chosenImage;
[picker dismissViewControllerAnimated:YES completion:NULL];
}
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[picker dismissViewControllerAnimated:YES completion:NULL];
}
-(void)statusBar:(BOOL)status
{
[[UIApplication sharedApplication] setStatusBarHidden:status];
}
UIImagePickerController
のステータスバーを非表示にする方法
IOS7でステータスバーが非表示にならないという問題がありました。プログラムで非表示にし、iOS7で表示しましたが、iOS6で実行すると、ステータスバーが適切に非表示になりました。 plistに移動して、次を追加する必要があります。
「コントローラーベースのステータスバーの外観を表示」および「いいえ」に設定します。
ステータスバーを他のView Controllerに再表示し、特定のVCでのみ非表示にする場合は、VCがロードされたときにステータスバーを非表示に設定します。 VCが消えたら、ステータスバーを非表示に設定します。
- (void)viewDidLoad
{
[super viewDidLoad];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
コントローラーが消えたら、以下を追加してステータスバーを設定します。これにより、非表示にならず、次のビューに表示されます。
-(void)viewWillDisappear:(BOOL)animated{
[[UIApplication sharedApplication] setStatusBarHidden:NO];
}
setStatusBarHidden:withAnimation:
スムーズなアニメーションが必要な場合
これは私のためにうまくいきました:
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
編集:今日の時点で、info.plistで、View Controllerベースのステータスバーの外観をコピーして貼り付けるだけでは機能しないことがわかりました...プロパティでEnterを押してスクロールする必要があります最後の1つであるため、コントローラーベースのステータスバーの外観とブール値を表示するオートコンプリートがあります。複数回試しましたが、コピーだけでは機能しません。ごきげんよう。
私がアプリケーション用に見つけたソリューションは、「コントローラーベースのステータスバーの外観を表示」を「はい」に設定して構築しました
カテゴリを追加しました:
//UIImagePickerController+StatusBarHidden.h
#import <UIKit/UIKit.h>
@interface UIImagePickerController (StatusBarHidden)
@end
//UIImagePickerController+StatusBarHidden.h
#import "UIImagePickerController+StatusBarHidden.h"
@implementation UIImagePickerController (StatusBarHidden)
-(BOOL) prefersStatusBarHidden {
return YES;
}
-(UIViewController *) childViewControllerForStatusBarHidden {
return nil;
}
@end
メソッドchildViewControllerForStatusBarHiddenはめったに使用されませんが、画像ピッカーはそれを使用するため、何らかのトラブルを引き起こす可能性があります
プロパティに基づいてYESまたはNOを返すメソッドを使用して、UIViewControllerシングルトンを実装することもできます。次に、View controlellerがchildViewControllerForStatusBarHiddenを実装して、上記のシングルトンを返します。シングルトンプロパティを変更すると、アプリのステータスバーが自動的に変更されます。ツインメソッドもありますchildViewControllerForStatusBarStyle
ただし、2014年のiOS8については、こちらをご覧ください https://stackoverflow.com/a/18960308/294884
サブクラスUIImagePickerController ...私はV1ImagePickerController ...
.mファイルは次のようになります。
#import "V1ImagePickerController.h"
@interface V1ImagePickerController ()
@end
@implementation V1ImagePickerController
- (void)viewDidLoad
{
[super viewDidLoad];
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) // iOS7+ only
{
self.edgesForExtendedLayout = UIRectEdgeNone;
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
}
- (BOOL)prefersStatusBarHidden
{
return YES;
}
- (UIViewController *)childViewControllerForStatusBarHidden
{
return nil;
}
@end
childViewControllerForStatusBarHiddenがキーです!
Plistからステータスバーを無効にする場合は、これを試してください。
これはiOS 7に必要で、私にとってはうまくいきます。 iOS7でこれを行うための他の手法があるかどうかはわかりません。 info.plistでこれらの2つのタグを設定します。
ViewControllerが表示されるたびに、viewDidLoadに表示されるか、画像ピッカーコントローラーが終了するたびに、これを使用します。
- (void) imagePickerController:(UIImagePickerController *)picker1 didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
.
.
.
.
}
上記のSilvertaurusの回答を使用しましたが、prefersStatusBarHidden
メソッドを少し変更して、非常に役立つと思いました。
//UIImagePickerController+StatusBarHidden.h
#import <UIKit/UIKit.h>
@interface UIImagePickerController (StatusBarHidden)
@end
//UIImagePickerController+StatusBarHidden.h
#import "UIImagePickerController+StatusBarHidden.h"
@implementation UIImagePickerController (StatusBarHidden)
-(BOOL) prefersStatusBarHidden {
if (self.sourceType==UIImagePickerControllerSourceTypeCamera) {
return YES;
} else {
return NO;
}
}
-(UIViewController *) childViewControllerForStatusBarHidden {
return nil;
}
@end
これにより、カメラが表示されていないときに、画像ピッカーのステータスバーが表示されます。
これを試して
[[UIApplication sharedApplication] setStatusBarHidden:NO animated:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent animated:YES];
これも確認してください discussion 。
これを試してください。
•UIImagePickerController
のデリゲートを設定する
•デリゲートのnavigationController:didShowViewController:animated:関数でステータスバーを非表示にします。
例えば:
-(void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
カテゴリでそれを行うことができます:
@interface UIImagePickerController (HideStatusBar)
@end
@implementation UIImagePickerController (HideStatusBar)
- (BOOL)prefersStatusBarHidden
{
return YES;
}
- (UIViewController *)childViewControllerForStatusBarHidden
{
return nil;
}
@end
試してみてください ここに投稿された私の答えViewController-Based Status Bar Appearance
。
私の場合、UIViewPickerViewController(iOS7)を表示するにはpresentViewControllerを使用する必要がありました。
1- .plistでView Controllerベースのステータスバーの外観をNOに設定します2- UIImagePickerControllerおよびviewDidLayoutSubviewsのカテゴリを作成します:
- (void)viewDidLayoutSubviews{
[super viewDidLayoutSubviews];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}
3-次の2つのメソッドをカテゴリに追加しました。
- (BOOL)prefersStatusBarHidden{
return YES;
}
- (UIViewController *)childViewControllerForStatusBarHidden{
return nil;
}
これが役立つことを願っています。
-(IBAction)takePhoto:(UIButton *)sender
{
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
[self statusBar:TRUE];
[self presentViewController:picker animated:YES completion:NULL];
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *chosenImage = info[UIImagePickerControllerEditedImage];
self.imageView.image = chosenImage;
[self statusBar:FALSE];
[picker dismissViewControllerAnimated:YES completion:NULL];
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self statusBar:FALSE];
[picker dismissViewControllerAnimated:YES completion:NULL];
}
-(void)statusBar:(BOOL)status
{
[[UIApplication sharedApplication] setStatusBarHidden:status];
}
それはあなたが望むものを達成するのに役立つかもしれません。
常にステータスバーを非表示にして、イメージピッカーを開くと表示されます。再度非表示にするには、iOS 8の時点で次のように機能しました。
-(void) imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissViewControllerAnimated:YES completion:^{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}];
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
[self dismissViewControllerAnimated:YES completion:^{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
}];
// do stuff with photo
}
私が持っています View controller-based status bar appearance
に設定NO
サブクラス化とplistを使用せずに、これを非常に簡単な方法で解決したと思います。 UIImagePickerControllerのみを非表示にします。
この例は、フォトギャラリーのみを表示するためのものですが、uiimagepickercontrollerを使用して、どこにでも同じ方法で適用できると思います
- (void)showGallary
{
[CATransaction begin];
[CATransaction setCompletionBlock:^{
[[UIApplication sharedApplication] setStatusBarHidden:YES];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
}];
imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[CATransaction commit];
}