私は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 Controllersを使用したカスタムトランジション」の講演で概説されており、独自のトランジションデリゲートの実装方法についても説明しています。
iOS7で上記の問題の私の解決策を見ることができます:https : //github.com/hightech/iOS-7-Custom-ModalViewController-Transitions
modalViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
問題を解決します