Изменение размера всплывающего окна в зависимости от ориентации - PullRequest
0 голосов
/ 31 мая 2019

У меня есть задание сделать всплывающее окно с изменяемым размером в зависимости от ориентации устройства Я инстанцирую это через окно вот так.

let window = UIApplication.shared.keyWindow
let popOver = DeletePopUpViewController(nibName: "DeletePopUpViewController", bundle: nil)
popOver?.loadViewIfNeeded()
popOver?.view.frame = window!.frame
window?.addSubview(popOver!.view)

Я добавил ограничения в IB, поскольку моя задача на данный момент не должна быть изменяемой. Теперь мне нужно перенести мои ограничения в код, и это то, что беспокоит меня. Я смог обнаружить изменение ориентации с помощью наблюдателя, как -

NotificationCenter.default.addObserver(self, selector: #selector(rotated), name: UIDevice.orientationDidChangeNotification, object: nil)

@objc private func rotated() {
    if UIDevice.current.orientation == UIDeviceOrientation.landscapeLeft || UIDevice.current.orientation == UIDeviceOrientation.landscapeRight {
         //code to implement constraints and size in landscape.
    }    
    if UIDevice.current.orientation == UIDeviceOrientation.portrait || UIDevice.current.orientation == UIDeviceOrientation.portraitUpsideDown {
        //code to implement constraints and size in portrait.
    }    
}

Не могли бы вы дать мне несколько советов, с чего начать, так как я довольно новичок в Swift и не сделал много ограничений в коде. Также статья будет полезна. В принципе, любая помощь приветствуется.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 31 мая 2019

Вам понадобится это для вашего popview, которое автоматически изменит размер

let popOver = DeletePopUpViewController(nibName:   "DeletePopUpViewController", bundle: nil)
        popOver?.loadViewIfNeeded()
popOver?.autoresizingMask = [.flexibleHeight, .flexibleWidth, .flexibleTopMargin, .flexibleRightMargin, .flexibleLeftMargin, .flexibleBottomMargin]
        popOver?.view.frame = window!.frame
        window?.addSubview(popOver!.view)
0 голосов
/ 31 мая 2019

Пожалуйста, обратитесь ниже код:

let window = UIApplication.shared.keyWindow
let popOver = DeletePopUpViewController(nibName:   "DeletePopUpViewController", bundle: nil)
popOver?.loadViewIfNeeded()
popOver.tag = 1000
popOver?.view.frame = window!.frame
window?.addSubview(popOver!.view)


@objc private func rotated() {    
    let window = appDelegate.window!

    if let popup = window.viewWithTag(1000){
        popup.frame = window.bounds
    }
}

Обновление: с автопрокладкой

  func addPopoverView(){
        guard let appDelegate = UIApplication.shared.delegate as? AppDelegate, let rootVC = appDelegate.window?.rootViewController else {
            return
        }
        let viewToAdd = UIView()
        let count = rootVC.view.subviews.count
        rootVC.view.insertSubview(viewToAdd, at: count)
        viewToAdd.translatesAutoresizingMaskIntoConstraints = false
        viewToAdd.leadingAnchor.constraint(equalTo: rootVC.view.leadingAnchor, constant: 0).isActive = true
        viewToAdd.trailingAnchor.constraint(equalTo: rootVC.view.trailingAnchor, constant: 0).isActive = true
        viewToAdd.topAnchor.constraint(equalTo: rootVC.view.topAnchor, constant: 0).isActive = true
        viewToAdd.bottomAnchor.constraint(equalTo: rootVC.view.bottomAnchor, constant: 0).isActive = true            
        viewToAdd.backgroundColor = UIColor.red
    }
...