ビューの背景が半透明で、下にビューを表示し続ける必要があるビューコントローラーがあります。 nib
ファイルの不透明度を調整し、View ControllerをNavigation Stackにプッシュし、モーダルで表示することを試みましたが、ロードされると前のビューがアンロードされます。どうすればこれを解決できますか?
これはあなたが探しているものですか?
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)
Swift 3.0コード
let addIncidentViewController = self.storyboard?.instantiateViewController(withIdentifier: "addIncidentViewController") as! AddIncidentViewController
addIncidentViewController.modalPresentationStyle = .overCurrentContext
self.present(addIncidentViewController, animated: true) {
}
そして、いくつかのアルファで背景色を設定します。
View Controllerの代わりにUIView
を使用できます。次に、ビューの背景色のアルファを調整します。
AppsDev、
これはあなたが仲間を探しているものですか?ここでTesting1234はparentViewControllerに追加されたラベルですMe hereは追加されたラベルですモーダルで提示されるchildViewControllerに:)
あなたの答えがはいの場合、ここにあなたがそれを行う方法があります:)あなたがストーリーボードを使用していると仮定すると、私は答えを書きます:)Xibを使用している場合、これらのプロパティはすべてプログラムで設定できることを心配しないでください:)
ここでの主なポイントは、modal presentation
overfull screen
:)
方法は次のとおりです。
2つのViewControllerの間にセグエをドラッグします:)セグエを作成してviewControllerをモーダルに表示し、次の構成を選択します:)
次に、secondViewControllerを表示する親ViewControllerを選択し、背景色を白(または任意の色)に変更します。
次に、表示する必要があるsecondViewControllerを選択します:)ビューを選択し、アルファを0.5に設定し、以下に示すように色をクリアします
次に、anotherViewをviewControllerに追加し、色を黒に設定し、シェードの必要性に応じてアルファを0.5または0.6に設定します:)
次に、追加するビューコンポーネントを実行して追加し、上記のように出力を設定します:)
それが役に立てば幸い :)
Swift
viewWillAppear
で以下を使用できます。
self.view.alpha = 0.8
viewWillDisappear
の下で次を使用できます。
self.view.alpha = 1.0
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)
_
ViewControllerに不透明度ビューを表示するには、2つの方法があります。
過電流ビューコントローラー
// presenting view controller
definesPresentationContext = true
// presented view controller
modalPresentationStyle = .overCurrentContext
View Controllerに全画面表示のナビゲーションまたはタブバーがある場合。
// presented view controller
modalPresentationStyle = .overFullScreen
modalTransitionStyle = .crossDissolve
(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)