web-dev-qa-db-ja.com

iOS:背景が透明なモーダルビュー?

ViewControllerでモーダルビューを表示したい。 (ナビゲーションコントローラーがあります)。

私のビューには、テキストと、モーダルビューを表示するボタンがあります。

モーダルビューを含む.xibを作成しました(これは画像とラベルのあるビューです)。

それを見せたら、それで:

ShareController *controller =  [[ShareController alloc] initWithNibName:@"ShareController" bundle: nil];
controller.view.backgroundColor = [UIColor clearColor];
controller.modalPresentationStyle = UIModalPresentationFormSheet;
controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:controller animated:YES completion:nil];

私はモーダルビューを持っていますが、背景は黒になります..私は常に私のビューにテキストを表示したいです。 (私はアルファなどを設定しようとしましたが、何も実行されません: '()

私を助けてくれる人?

おかげで、

30
deveLost

あなたはiOS7の例をチェックすることができます(私の通信を参照してください)、またはあなたはこれを簡単に試すことができます:

「表示」メソッドからこの行を削除します

controller.view.backgroundColor = [UIColor clearColor];

現在、ShareControllerのviewDidLoadで次を追加します。

 self.view.backgroundColor = [UIColor clearColor];
 self.modalPresentationStyle = UIModalPresentationCurrentContext;
 self.modalPresentationStyle = UIModalPresentationFormSheet;

PS

navigationControllerがある場合...

[self.navigationController presentViewController:controller animated:YES completion:nil];
23
TonyMkenu

次のスニペットを使用して、iOS 8以降で実行します。

Objective Cの場合:

UIViewController *walkThru = [self.storyboard   instantiateViewControllerWithIdentifier:@"WalkThroughScene"];
walkThru.providesPresentationContextTransitionStyle = YES;
walkThru.definesPresentationContext = YES;
[walkThru setModalPresentationStyle:UIModalPresentationOverCurrentContext];
[self.navigationController presentViewController:walkThru animated:YES completion:nil];

Swift 2:の場合

let viewController : XYZViewController =     self.storyboard!.instantiateViewControllerWithIdentifier(“XYZIdentifier”) as! XYZViewController
viewController.providesPresentationContextTransitionStyle = true
viewController.definesPresentationContext = true
viewController.modalPresentationStyle=UIModalPresentationStyle.OverCurrentContext
self.presentViewController(viewController, animated: true, completion: nil)

Swift 4:の場合

let viewController =  self.storyboard!.instantiateViewController(withIdentifier:  "XYZIdentifier") as! XYZViewController
viewController.providesPresentationContextTransitionStyle = true
viewController.definesPresentationContext = true
viewController.modalPresentationStyle = .overCurrentContext
self.present(viewController, animated: true, completion: nil)

また、表示されるviewControllerの背景色はclearColorでなければなりません。

104
pankaj

ModalVCをタブバー上に配置するには、プレゼンテーションスタイルをUIModalPresentationOverFullScreenとして定義する必要があります

[_presentedViewController setModalPresentationStyle:UIModalPresentationOverFullScreen];

[_presentingViewController presentViewController:_presentedViewController animated:YES completion:nil];
3
dorian

PresentingViewControllerで、ストーリーボードセグエまたはIBActionの下の以下のコードをコピーします。

SecondViewController *viewController = [self.storyboard   instantiateViewControllerWithIdentifier:@"secondViewController"];
//SecondViewController *viewController = [SecondViewController alloc]init]; // if you are adding the viewcontroller programatically
viewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    [viewController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[self presentViewController:viewController animated:YES completion:nil];

2番目のViewControllerでは、ストーリーボードまたはコードを使用して次の手順を実行します。

  1. ビューの(self.view)backgroundcolorからclearcolorに変更し、不透明度を50%に減らします
  2. これで、半透明のモーダルビューを実現できます
2
vigneshwaran s

簡単な答えは、presentViewController:animated:completion:メソッドではなく、透明なモーダルビューを表示できないことです。モーダルビューコントローラーを透明にすることはできないためです(ビューはその上に配置されます)。

カスタムビューを作成し、手動でアニメーション化できます。これは、必要なものを作成する方法です。

2
Greg

それはUIWindow's色、appDelegateでUIWindow色を初期化できます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    return YES;
}
0
N.nnd