web-dev-qa-db-ja.com

背景が薄暗いView Controllerを表示する

ビューの背景が半透明で、下にビューを表示し続ける必要があるビューコントローラーがあります。 nibファイルの不透明度を調整し、View ControllerをNavigation Stackにプッシュし、モーダルで表示することを試みましたが、ロードされると前のビューがアンロードされます。どうすればこれを解決できますか?

10
AppsDev

これはあなたが探しているものですか?

View Controller A-> View Controller B(ペン先)

Swift <3:

View Controller Aで、次のコード行を追加します。

let viewControllerB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
viewControllerB.modalPresentationStyle = .OverFullScreen

presentViewController(viewControllerB, animated: true, completion: nil)

そして、View Controller Bで、viewメソッドを使用してcolorWithAlphaComponentの背景色を設定します。

view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)        

Swift≥3:

ビューコントローラA:

let viewControllerB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
viewControllerB.modalPresentationStyle = .overFullScreen

present(viewControllerB, animated: true, completion: nil)

ビューコントローラーB:

view.backgroundColor = UIColor.black.withAlphaComponent(0.7)
19
Anh Pham

Swift 3.0コード

let addIncidentViewController = self.storyboard?.instantiateViewController(withIdentifier: "addIncidentViewController") as! AddIncidentViewController
addIncidentViewController.modalPresentationStyle = .overCurrentContext
self.present(addIncidentViewController, animated: true) {

    }

そして、いくつかのアルファで背景色を設定します。

3
krish

View Controllerの代わりにUIViewを使用できます。次に、ビューの背景色のアルファを調整します。

2
tuledev

AppsDev、

これはあなたが仲間を探しているものですか?ここでTesting1234はparentViewControllerに追加されたラベルですMe hereは追加されたラベルですモーダルで提示されるchildViewControllerに:)

enter image description here

あなたの答えがはいの場合、ここにあなたがそれを行う方法があります:)あなたがストーリーボードを使用していると仮定すると、私は答えを書きます:)Xibを使用している場合、これらのプロパティはすべてプログラムで設定できることを心配しないでください:)

ここでの主なポイントは、modal presentationoverfull screen :)

方法は次のとおりです。

2つのViewControllerの間にセグエをドラッグします:)セグエを作成してviewControllerをモーダルに表示し、次の構成を選択します:) enter image description here

次に、secondViewControllerを表示する親ViewControllerを選択し、背景色を白(または任意の色)に変更します。

enter image description here

次に、表示する必要があるsecondViewControllerを選択します:)ビューを選択し、アルファを0.5に設定し、以下に示すように色をクリアします

enter image description here

次に、anotherViewをviewControllerに追加し、色を黒に設定し、シェードの必要性に応じてアルファを0.5または0.6に設定します:)

enter image description here

次に、追加するビューコンポーネントを実行して追加し、上記のように出力を設定します:)

それが役に立てば幸い :)

2

Swift

viewWillAppearで以下を使用できます。

self.view.alpha = 0.8 

viewWillDisappearの下で次を使用できます。

self.view.alpha = 1.0
1
Geniouse

View Controllerを複数の場所で使用したい状況を想像してください(フレームワークを作成しているとしましょう)。 modalPresentationStyleを_.overCurrentContext_に設定する必要がありますが、View Controllerの新しいインスタンスを作成するたびに設定する必要はありません。

表示されるView Controllerのオーバーライドされたinit内に設定したい

_override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
    modalPresentationStyle = .overCurrentContext
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
_

次に、このコントローラーのviewDidLoad()で、背景色だけでなく黒の明るい色合いを使用します。

_override public func viewDidLoad() {
    super.viewDidLoad()
    view.backgroundColor = UIColor.black.withAlphaComponent(0.6)
}
_

最後に、View Controllerを提示する必要がある場合は、初期化して提示するだけです

_let viewController = SecondViewController(nibName: "SecondViewController", bundle: nil)
present(viewController, animated: true)
_
0
Robert Dresler

ViewControllerに不透明度ビューを表示するには、2つの方法があります。

過電流ビューコントローラー

// presenting view controller
definesPresentationContext = true

// presented view controller
modalPresentationStyle = .overCurrentContext

View Controllerに全画面表示のナビゲーションまたはタブバーがある場合。

// presented view controller
modalPresentationStyle = .overFullScreen
modalTransitionStyle = .crossDissolve
0
Jone

(Swift 3)より良い解決策は、xibからビューをロードし、次のようにコントローラーに追加することです:

   let supportView =  Bundle.main.loadNibNamed("YourXIB", owner: nil, options: nil)?[0] as! YourView

    let viewController = UIViewController()
    viewController.view = supportView
    viewController.modalPresentationStyle = .overCurrentContext

    present(viewController, animated: true, completion: nil)e

次に、透明度を追加します。

    viewController.view.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.7)    
0