webdevqa.jp.net

下の親を表示するための透過的なViewController?

背景が透明なViewControllerをモーダルに追加して、下の親ViewControllerが表示されるようにします。 (これはiPad用ではなくiPhone用のアプリにあります。)

私はこれを試しました:

TextFieldViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TextFieldVC"];
vc.modalPresentationStyle = UIModalPresentationCurrentContext;
vc.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
[self.navigationController presentViewController:vc animated:YES completion:^{}];

運がなく、ビューコントローラーにクリアカラーの背景が与えられました。それが何かを変えるなら、私のビューコントローラーはストーリーボードにあります。

21
Josh Kahane

@Josh Kahaneは、このコードを-ViewDidLoadに透過ビューコントローラーに提示するビューコントローラーを設定し、UIViewControllerビューのアルファチャネルを必ず1より低く設定してください。

コード:

self.modalPresentationStyle = UIModalPresentationCurrentContext;
15
or azran

完全を期して最新の状態にするために、Swiftのソリューションも追加しています。

どちらか

viewController.modalPresentationStyle = .CurrentContext 

存在-コンテンツがプレゼンテーションビューコントローラーのコンテンツのみに表示されるプレゼンテーションスタイル。

または

viewController.modalPresentationStyle = .OverCurrentContext

存在-コンテンツが親ViewControllerのコンテンツのみに表示されるプレゼンテーションスタイル。表示されたコンテンツの下のビューは、表示が終了してもビュー階層から削除されません。したがって、提示されたView Controllerが不透明なコンテンツで画面を埋めない場合、基になるコンテンツが透けて見えます。

プレゼンテーションの要件と状況に応じて。

7
Michal

私は解決策を探していました。 iOS 8に感謝します。彼らは、いくつかの新しいmodalPresentationStyleを導入しました。それらの1つはUIModalPresentationOverCurrentContextです。この問題を解決するために同じものを使用しました。

viewcontroller.modalPresentationStyle = UIModalPresentationOverCurrentContext;

お役に立てれば。

7
Abhijit

簡単に忘れられるステップがたくさんありますが、それは可能です。これを4時間機能させるのに苦労した後、私は次の解決策を思いつきました。

1-他のようにView Controllerを作成します。

ヘッダーファイル

#import "DDBaseViewController.h"

@interface DDHomeSearchLoadingViewController : UIViewController

@end

実装ファイル

#import "DDHomeSearchLoadingViewController.h"

@interface DDHomeSearchLoadingViewController ()
@property (weak, nonatomic) IBOutlet UIActivityIndicatorView *activityMonitor;
@property (weak, nonatomic) IBOutlet UIView *modalView;

@end

@implementation DDHomeSearchLoadingViewController

#pragma mark - UIViewController lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];


    [self setupUI];
}

-(void) setupUI
{
    [self makeRoundedCorner:self.modalView AndCornerRadius:6.0f];
    [self.activityMonitor startAnimating];

}

-(void) makeRoundedCorner:(UIView*) view AndCornerRadius:(float) cornerRadius
{
    [view.layer setCornerRadius:cornerRadius];
    [view.layer setMasksToBounds:YES];
}

@end

2-コンテナビューの背景色をClearColorとして設定します

enter image description here

-オーバーレイのように表示されるUIViewを追加します

enter image description here

4-オーバーレイUIView上にダイアログボックスのように表示されるUIViewを追加します

追加/移動するときはオーバーレイビューの外側にあることを確認してください。何らかの理由でマウスを使用して移動すると、オーバーレイUIViewに自動的に追加されます。(正直言って迷惑です) )

enter image description here

5-作成したビューのストーリーボードIDを設定します

enter image description here

6-最後に、このコードを呼び出さない場所に追加します(UiViewControllerでもあると仮定します)

DDHomeSearchLoadingViewController* ddHomeSearchLoadingViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"DDHomeSearchLoadingViewController"];
self.navigationController.modalPresentationStyle = UIModalPresentationCurrentContext;
[self presentViewController:ddHomeSearchLoadingViewController animated:YES completion:nil];

私はそれがあなたたちを助けることを願っています

乾杯

スウィフト3-

vc.modalPresentationStyle = .overFullScreenをお試しください

let vc = self.storyboard!.instantiateViewControllerWithIdentifier("ExampleViewController") as! ExampleViewController
vc.view.backgroundColor = UIColor.clearColor()
vc.modalPresentationStyle = .overFullScreen
self.presentViewController(vc, animated: true, completion: nil)
1
Allen
UIStoryboard *story = [UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]];
    ChooseController *sec=[story instantiateViewControllerWithIdentifier:@"Controller"];
    sec.modalPresentationStyle = UIModalPresentationOverCurrentContext;
    sec.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentViewController:sec animated:YES completion:^{

    }];

注:現在のコントローラーのスーパービューのアルファ値は、0.5アルファのように1未満である必要があります。

0
user6838301

以下のオプションを実行し、親ビューの不透明度を下げるだけで、ストーリーボードに変更を加えることができます。ストーリーボードの使用:これを実現するためにコードを記述する必要はありません

enter image description here

0