サブビュー/モーダルを透明にする必要があり、サブビューに追加されたコンポーネントが表示されるようにするなど、別のビューのUIViewController
上にサブビュー/モーダルとしてビューがあります。UIViewController
問題は、サブビューに clearColor の代わりに黒い背景が表示されることです。UIView
黒の背景ではなく clearColor として作成しようとしています。何が悪いのか誰か知っていますか?任意の提案をいただければ幸いです。
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
[vc setModalPresentationStyle:UIModalPresentationFullScreen];
[self presentModalViewController:vc animated:NO];
SecondViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.opaque = YES;
self.view.backgroundColor = [UIColor clearColor];
}
解決済み: 問題を修正しました。iPhoneとiPadの両方でうまく機能しています。clearColor/transparent だけの黒い背景のモーダル ビュー コントローラー。変更する必要があるのは、に置き換えるだけUIModalPresentationFullScreen
ですUIModalPresentationCurrentContext
。それはなんと簡単なことでしょう。
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
注意:modalPresentationStyle
のプロパティを使用している場合navigationController
:
FirstViewController.m
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"SecondViewController"];
vc.view.backgroundColor = [UIColor clearColor];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:vc animated:NO completion:nil];
注意: 悪いニュースは、上記の解決策が iOS 7 では機能しないことです。良いニュースは、iOS7 の問題を修正したことです! 私は誰かに助けを求めました、そしてこれが彼が言ったことです:
ビュー コントローラーをモーダルに表示すると、iOS は表示されている間、その下にあるビュー コントローラーをビュー階層から削除します。モーダルに表示されたビュー コントローラーのビューは透明ですが、その下には黒いアプリ ウィンドウ以外は何もありません。iOS 7 では、新しいモーダル表示スタイル が導入されましたUIModalPresentationCustom
。これにより、表示されたビュー コントローラーの下にあるビューが iOS によって削除されなくなります。ただし、このモーダル プレゼンテーション スタイルを使用するには、独自のトランジション デリゲートを提供して、プレゼンテーションを処理し、アニメーションを閉じる必要があります。これは、WWDC 2013 https://developer.apple.com/wwdc/videos/?id=218の「View Controller を使用したカスタム トランジション」の講演で概説されており、独自のトランジション デリゲートの実装方法についても説明されています。
iOS7 で上記の問題に対する私の解決策が表示される場合があります: https://github.com/hightech/iOS-7-Custom-ModalViewController-Transitions