10

私は以下のようなビューコントローラを提示モーダルしようとしています:遷移を伴うUIModalPresentationCurrentContext?

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"addPopover"]; 
vc.view.backgroundColor = [UIColor clearColor]; 
self.modalPresentationStyle = UIModalPresentationCurrentContext; 
[self presentModalViewController:vc animated:YES]; 

UIModalPresentationCurrentContextを使用して、私は透明な背景で、このビューを提示し、新しいものの背後にある私の他のビューを表示できることを意味します。しかし、それは私に移行を提示することができなくなります。

なぜでしょうか?または、私はこれをどのように回避することができますか?ありがとう。

+0

あなたが提示しているViewControllerのプレゼンテーションスタイルは何ですか? – brynbodayle

+0

@bbodayle、私は同じ問題を抱えています。両方のViewControllerですべてのプレゼンテーションスタイル/組み合わせを試しました。 –

答えて

11

フルスクリーンモードでは、下位レイヤーを表示できません。私は迷惑を掛けている。

あなたのコードからは、「addPopover」は実際にはフルスクリーン表示で、コンテンツはサブセクションとして残りは透過的です。

vc.modalPresentationStyle = UIModalPresentationCurrentContext; 
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
[self presentViewController:vc animated:YES completion:NULL]; 

注:

はこれを試してみてください私は、ユーザーが使用すると、トップの上にこれをポップするとき、彼らはビューの残りの部分と対話することはできませんことを知らせるために、低アルファの背景色を追加することをお勧めしたいです。 ..

+1

ここでは何が違うのですか?ターゲットビューでmodalTransitionStyleを設定しても差異はなく、どちらもpresentModalViewControllerでpresentViewControllerを使用しませんでした。 –

+0

'self'ではなく' vc'にトランジションスタイルを割り当て、 'presentViewController'メソッドを使用します。あなたのストーリーボードを見ることなく、これがうまくいかないと診断するのは難しいです。上記の方法では、オーバーレイされたVCは "self"と同じサイズである必要があります(またはサイズ変更可能) –

+2

はい、私のプロジェクトでは、両方のViewControllerが同じサイズです。私はあなたのコードを試して、変更はありませんでした。プロパティ設定 'modalPresentationStyle = UIModalPresentationCurrentContext'はここではなく、VCに適用される必要があります。私は、たとえそれが1とマークされているにもかかわらず、ここには解決策がないので、私は自分自身の質問をこれに提供する代わりに、自分の質問を開始しなければならないと思う。 –

25

このrootViewControllerの上に新しいフルスクリーンのviewControllerを表示していない場合、私はUIWindowのrootViewControllerにmodalPresentationStyle = UIModalPresentationCurrentContextを設定することでこれを達成できました。私は私の窓のrootViewControllerとしてUINavigationControllerと他のさまざまなカスタムView Controllerの両方でこれを試してみた

UIViewController *rootViewController = [UIApplication sharedApplication].delegate.window.rootViewController; 
rootViewController.modalPresentationStyle = UIModalPresentationCurrentContext; 
[self presentViewController:vc animated:YES completion:nil]; 

:私はこのような何かをしました。ウィンドウのrootViewControllerが何が起きているかを知っている限り、サブビューコントローラーはpresentViewController:animated:completion:を呼び出すことができ、基になるビューをブラックアウトすることはできません。

ただし、ウィンドウのrootViewControllerの上に別のviewControllerを表示するとします。そして、この新しいviewControllerはmodalPresentationStyle = UIModalPresentationFullScreenと表示されます(つまり、画面を占有します)。そして、一番上のviewControllerにmodalPresentationStyle = UIModalPresentationCurrentContextを呼び出す必要があります。

だから要約する:あなたはUINavigationController持ちの場合

  • - >のUIViewController(複数可)(彼らは押され、inとoutポップすることができる)、そして、あなたはUINavigationControllerにmodalPresentationStyle = UIModalPresentationCurrentContextを設定します。
  • UINavigationController - > UIViewController - > new-UIViewController(modalPresentationStyleをUIModalPresentationFullScreenに設定)がある場合は、新しいUIViewControllerにmodalPresentationStyle = UIModalPresentationCurrentContextを設定します。

うまくいけば、これは皆さんにとってもうまくいきます。

+1

これは私のために働いた。キーは、提示されているビューコントローラではなく、提示されているビューコントローラでmodalPresentationStyleを設定していました。 –

+0

UISplitViewControllerにプレゼンテーションする場合はどうなりますか? –

+0

ありがとう! –

0

T氏の提案は、ほぼ完全に、あなたはちょうどそれから提示されたビューの提示

のViewControllerそれはまたappDelegates rootviewControllerのプレゼンテーションのスタイルを設定しているので、それも削除されます遷移アニメーションのトランジションアニメーションを失う働いていましたポイント。

私の問題を修正する修正プログラムをAppDelegates rootViewControllerのプレゼンテーションスタイルを返すようにしたそれに戻って、デフォルトだのViewControllerが、私は

上に透明な背景を必要とすることを閉じている時はいつでも私はpresentedViewControllerを閉じるボタンがあり、その中で私はまた、プレゼンテーションを設定します使用して、デフォルトに戻しrootViewControllerのスタイル:

UIViewController *rootViewController = [[[[UIApplication sharedApplication] delegate] window] rootViewController]; 
    rootViewController.modalPresentationStyle = UIModalPresentationFullScreen; 

私は、誰がこの問題に困惑して得ることができます願っています。