Ограничения не работают правильно в Present ViewController - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть ViewController, например PopUp, но View не остается в нужном положении.

Я хочу, чтобы этот View оставался в центре экрана.На приведенном ниже экране показано представление в раскадровке с установленными ограничениями и результат на симуляторе.

enter image description here

AlertViewController.swift

class AlertViewController : UIViewController {

    @IBOutlet weak var frameView: UIView!
    @IBOutlet weak var btCancel: UIButton!
    @IBOutlet weak var lblInfo: UILabel!

    var delegate : AlertViewControllerDelegate?

    override func viewDidLoad() {
        super.viewDidLoad()        
        self.frameView.layer.cornerRadius = 10
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
    }

    @IBAction func cancel(_ sender: Any) {
        delegate?.cancelBt()
        self.dismiss(animated: true, completion: nil)
    }
}

MainViewController.swift (показать)

let alertController = self.storyboard?.instantiateViewController(withIdentifier: "AlertVC") as! AlertViewController
            alertController.providesPresentationContextTransitionStyle = true
            alertController.definesPresentationContext = true
            alertController.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
            alertController.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
            alertController.delegate = self

            self.present(alertController, animated: true, completion: {})

РЕДАКТИРОВАТЬ

Я пробовал это.

enter image description here

Результат: (я изменил цвет фона).

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Ваша проблема, по-видимому, связана не с ограничениями содержимого вашего оповещения, а с размещением / ограничениями представления, которое вы представляете в связи с вашим родительским представлением.Казалось бы, вам нужно вручную установить значения высоты и ширины наблюдателя предупреждений и координаты x, y в коде, чтобы они правильно отображались.

[РЕДАКТИРОВАТЬ] Я только что заметил порядок, в котором установлены ваши ограничения.Убедитесь, что вы перетаскиваете из своего FrameView в SuperView и устанавливаете ограничение в этом направлении.То есть, ПЕРВЫЙ ПУНКТ: FrameView .... ВТОРОЙ ПУНКТ: SuperView ... Это также может быть причиной ваших проблем.

Здесь также есть хорошее обсуждение некоторых проблем с автоматическим макетом и PresentViewController: Недопустимый автоматический макет после представления контроллера вида (и многих других ситуаций)

В любом случае, я бы рекомендовал использовать Центр по горизонтали и Центр по вертикали, в отличие от значений фиксированного статического ограничения для вашего «внутреннего вида»в вашем AlertView.Кажется, это работает лучше при масштабировании на дисплеях разных размеров.

Некоторые ресурсы, которые могут оказаться полезными:

Но, учитывая то, что вы представляете, довольно простоalertview, я бы порекомендовал пропустить повторное изобретение колеса и использовать некоторые готовые библиотеки, которые значительно облегчат вашу жизнь.

1. EZAlertController если все, что вам нужноявляются текстовыми кнопками и кнопками действий.

2. MRProgress , если все, что вам нужно, это индикаторы загрузки / прогресса.

3. NYAlertView если вы являетесьпоиск - это свобода добавлять свой собственный UIView в оповещение.

Эти библиотеки позаботятся о проблемах с ограничениями и сделают разработку намного быстрее.

[ПРАВИТЬ] ВыВозможно, вы захотите взглянуть на: https://github.com/vsouza/awesome-ios#alert--action-sheet, в котором есть отличный список полезных модулей, которые действительно помогают в разработке под iOS.

0 голосов
/ 25 сентября 2018

Ваша проблема заключается в установке верхних, нижних, начальных и конечных ограничений со статическими значениями, которые могут нарушаться при запуске в устройстве, вам необходимо установить

ширина, высота, центрX, центрY

* хорошая практика, чтобы сделать ширину и высоту пропорциональными экрану с множителем или размером содержимого в зависимости от *

верхняя метка

top, centerX

активность

сверху до метки, centerX

середина метки

centerX, Y

кнопка отмены

centerX, низ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...