ここでは、以下のコードを使用しています。誰かがこの問題を知っているなら私を助けてください。以下のURLも試しましたが、機能しません。私を助けてください
iOS7 UIImagePickerControllerキャンセルボタンが消えますIPopoverController内のUIImagePickerControllerはiOS7のキャンセルボタンを表示しません
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
picker.navigationBar.tintColor = [UIColor redColor];
picker.navigationBar.barStyle = UIBarStyleBlackOpaque;
picker.navigationBar.topItem.rightBarButtonItem.tintColor = [UIColor blackColor];
私の問題:
私の要求:
これは私のために働いたものです:
present(imagePicker, animated: true, completion: {
imagePicker.navigationBar.topItem?.rightBarButtonItem?.tintColor = .black
})
すべての努力がうまくいかない場合は、appearance()メソッドを使用する必要があります。したがって、表示する任意のビューコントローラ(UIImagePickerController)に次の行を記述してみてください。外観はどのクラスでも使用できますが、UIBarButtonItem.appearance()を他の目的で使用した可能性があるため、それを見つけて、viewDidDisappear()でそのコードを記述します。
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.red], for: .normal)
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedStringKey.foregroundColor: UIColor.red], for: .highlighted)
コントローラーにtopItem
がない前に、UIImagePickerControllerの色合いの色を変更するだけでは実行できなかったため、Appleはそれを間違えました(iOS 10、Xcode 8))のように見えます。プロパティ、またはnavigationController
プロパティ。UIImagePickerController extension
で変更を行いました。しかし、これらのオーバーライドされたメソッドでnavigationController
とtopItem
をチェックしました:viewDidLoad
、viewWillAppear
、viewDidAppear
。しかし、それでもnil
でした。それで、viewWillLayoutSubviews
でチェックすることにしました。出来上がりです!ゼロではなかったので、ここで正確なrightBarButtomItemのバーの色合いの色を設定できます!
次に例を示します。
extension UIImagePickerController {
open override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.navigationBar.topItem?.rightBarButtonItem?.tintColor = UIColor.black
self.navigationBar.topItem?.rightBarButtonItem?.isEnabled = true
}
}
そして、super.viewWillLayoutSubviews
を呼び出すことを忘れないでください、それは非常に重要です;-)編集:しかし、アルバム画面に戻ったときにまだ問題があります。
Swift 4.2 Solution、AppDelegateのdidFinishLaunchingWithOptionsに以下のコードを追加します
UINavigationBar.appearance(whenContainedInInstancesOf: [UIImagePickerController.self]).tintColor = .black
あなたが投稿したのと同じコードを使用しました。 「キャンセル」ボタンが表示されます。
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:picker animated:YES completion:NULL];
picker.navigationBar.tintColor = [UIColor redColor];
picker.navigationBar.barStyle = UIBarStyleBlackOpaque;
picker.navigationBar.topItem.rightBarButtonItem.tintColor = [UIColor blackColor];
[self presentViewController:picker animated:YES completion:NULL];
カスタムナビゲーションバーを使用していて、アプリデリゲートのプロパティをナビゲーションnarの色合いの色を変更するように設定している可能性があります。
一部のアイテムプロパティを更新するとボタンが表示されるように見えるので、次のように有効にします。
present(imagePicker, animated: true, completion: {
self.imagePicker.navigationBar.topItem?.rightBarButtonItem?.isEnabled = true
})
ViewControllerをNavigationControllerに埋め込んでいないと思います
それを実行してコードを試してください:(目的--c)
-(void)viewDidLoad
{
[super viewDidLoad];
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
imagePickerController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePickerController.delegate = self;
[self presentViewController:imagePickerController animated:YES completion:nil];
}
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *image = [info valueForKey:UIImagePickerControllerOriginalImage];
[picker dismissViewControllerAnimated:YES completion:^{
}];
UIImageView *imageview=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 100, 300)];
imageview.image=image;
}
上記のいずれかがうまくいかない場合は、UIImagePickerController
を定義するときにこれを追加してみてください
imagePicker.modalPresentationStyle = .popover // Or.fullScreen (Can also check cases for iPad and iPhone as per requirement)
チャームのように私のために働いた。これによってかなりバグがありました
UIImagePickerController *imgPicker=[[UIImagePickerController alloc]init];
imgPicker.delegate = self;
imgPicker.navigationBar.barStyle = UIBarStyleBlackOpaque;
UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imgPicker.allowsEditing = NO;
if([UIImagePickerController isSourceTypeAvailable: sourceType])
{
imgPicker.sourceType=sourceType;
[self presentViewController:imgPicker animated:YES completion:NULL];
}
Swift 3以上でこのコードを試してください
let picker = UIImagePickerController()
picker.navigationBar.topItem?.rightBarButtonItem?.tintColor = UIColor.white
以下のようにUIPickerViewControllerをサブクラス化します。
class CustomImagePicker: UIImagePickerController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
UINavigationBar.appearance().tintColor = UIColor.black
UIBarButtonItem.appearance().setTitleTextAttributes([NSAttributedString.Key.foregroundColor : UIColor.init(red: 0.0, green: 122.0/255.0, blue: 1.0, alpha: 1.0)], for: .normal)
}
override func viewWillDisappear(_ animated: Bool) {
UINavigationBar.appearance().tintColor = UIColor.white // your color
UIBarButtonItem.appearance().setTitleTextAttributes(nil, for: .normal)
super.viewWillDisappear(animated)
}
}
そして、次のように使用します。
func openGallary()
{
picker!.sourceType = UIImagePickerController.SourceType.photoLibrary
picker!.modalPresentationStyle = .currentContext
self.present(picker!, animated: true, completion: nil)
}
uIImagePickerControllernavigationBar.tintColorを変更して次のコードを試してください:
UINavigationBar *bar = [self.navigationController navigationBar];
[bar setTintColor:[UIColor blueColor]];
私はこの種の同じ問題に直面していて、多くの時間を無駄にした後、私は解決策を見つけました。この問題が発生した理由を以下のコードのようにナビゲーションバーの外観をカスタマイズしました。
UINavigationBar.appearance().backIndicatorImage = UIImage(named: "ic_left")
let attributes = [NSAttributedString.Key.font: UIFont(name: "FuturaPT-Medium", size: 16)!]
UINavigationBar.appearance().titleTextAttributes = attributes
UINavigationBar.appearance().setBackgroundImage(UIImage(named: "line.png"),for: .bottom,barMetrics: .default)
UINavigationBar.appearance().shadowImage = UIImage(named: "line.png")
UIBarButtonItem.appearance()。setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.clear]、for:.normal)
これはナビゲーションバーのカスタム外観であり、タイトルの色をクリアに設定しているため、コードの最後の行を変更する必要があります。これは本当にとても簡単です。イメージピッカーコントローラーを提示する前に、このコードを入力してください。
UIBarButtonItem.appearance()。setTitleTextAttributes([NSAttributedString.Key.foregroundColor:UIColor.black]、for:.normal)
また、ナビゲーションバーのボタンのタイトルが必要ない場合は、テキストの色をクリアにします。 ありがとう
これは私のために働いた:
let BarButtonItemAppearance = UIBarButtonItem.appearance()
BarButtonItemAppearance.setTitleTextAttributes([NSForegroundColorAttributeName: .blue), NSFontAttributeName: UIFont.boldSystemFont(ofSize: 16.0)], for: .normal)