it-swarm.com.ru

Представление контроллера представления с тусклым фоном

У меня есть контроллер вида, вид фона которого мне нужен, чтобы быть полупрозрачным и продолжать показывать вид ниже. Я изменил непрозрачность в файле nib и попытался как вставить контроллер представления в стек навигации, так и представить его модально, но при загрузке предыдущее представление выгружается. Как я мог решить это?

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)
18
Anh Pham

Код Swift 3.0  

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

    }

И установить цвет фона с некоторым альфа.

3
krish

Вы можете использовать UIView вместо контроллера представления . Затем отрегулируйте альфа цвета фона представления.

2
tuledev

AppsDev,

Это то, что вы ищете, приятель ??? Здесь Testing1234 - метка, добавленная в parentViewController Me здесь - метка, добавленная в childViewController, которая представлена ​​модально :)

 enter image description here

Если вы ответили «да», вот как вы можете это сделать :) Если вы используете раскадровку, я напишу ответ :) Если вы используете Xib, не беспокойтесь, все эти свойства могут быть также установлены программно :)

Главное здесь - сделать код modal presentationoverfull screen :)

Вот как вы можете это сделать :)

Перетащите переход между двумя вашими ViewControllers :) Сделайте переход, чтобы представить viewController модально, и выберите следующие конфигурации:)  enter image description here

Теперь выберите ваш родительский ViewController, который представит secondViewController и изменит его цвет фона на белый (или любой другой цвет, который вы хотите)

 enter image description here

Теперь выберите свой второй ViewController, который должен быть представлен :) Выберите его View и установите его альфа на 0.5 и color, чтобы очистить цвет, как показано ниже

 enter image description here

Теперь добавьте другой ViewView в viewController, установите его цвет на черный и альфа на 0,5 или 0,6 в зависимости от вашей потребности в тени :)

 enter image description here

Теперь добавьте все компоненты представления, которые вы хотите добавить, и запустите выход, как показано выше :)

Надеюсь, поможет :)

2
Sandeep Bhandari

Swift3

Под viewWillAppear вы можете использовать:

self.view.alpha = 0.8 

А под viewWillDisappear вы можете использовать:

self.view.alpha = 1.0
1
Geniouse

Представьте себе ситуацию, когда вы хотите использовать свой контроллер представления в нескольких местах (скажем, вы создаете фреймворк). Вам нужно установить modalPresentationStyle в .overCurrentContext, но вы не хотите устанавливать его каждый раз, когда создаете новый экземпляр контроллера представления. 

Вы хотите установить его внутри переопределенного 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)
}

Наконец, когда вам нужно представить свой контроллер представления, просто инициализируйте его и представьте его

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

Есть два способа представить ViewController с непрозрачным представлением.

За текущий viewcontroller

// presenting view controller
definesPresentationContext = true

// presented view controller
modalPresentationStyle = .overCurrentContext

Если у контроллера представления есть навигация или панель вкладок по всему экрану.

// 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
Fares Ben Hamouda