Программное изменение размера карты Google (Swift)

Я пытаюсь программно добавить Google GMSMapView, но застрял и буду признателен за любую помощь. Я хочу установить ограничения карты по краям представления.

Однако, когда я это делаю, я получаю сообщение об ошибке: «Невозможно активировать ограничение с помощью якорей, поскольку у них нет общего предка. Указывает ли ограничение или его якоря на элементы в разных иерархиях представлений?»

var mapView:GMSMapView?

override func viewDidLoad() {
    super.viewDidLoad()

    mapView = GMSMapView.map(withFrame: CGRect(x: 100, y: 100, width: 200, height: 200), camera: GMSCameraPosition.camera(withLatitude: 51.050657, longitude: 10.649514, zoom: 5.5))

    mapView?.center = self.view.center

    mapView?.topAnchor.constraint(equalTo: view.topAnchor).isActive=true
    mapView?.leftAnchor.constraint(equalTo: view.leftAnchor).isActive=true
    mapView?.rightAnchor.constraint(equalTo: view.rightAnchor).isActive=true
    mapView?.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 60).isActive=true

    self.view.addSubview(mapView!)

}

Я могу заставить Google Maps загружаться правильно, если не указывать якоря, поэтому я считаю, что в противном случае он настроен правильно. Я просто не понимаю, как правильно установить якоря.

Это решение похоже, но больше ориентировано на добавление представления с автоматическим макетом.


person Ben    schedule 14.09.2018    source источник


Ответы (1)


Проблема возникает, когда вы применяете ограничения к представлению перед добавлением его к родительскому представлению. Также установите для translatesAutoresizingMaskIntoConstraints значение false, чтобы ограничения работали.

self.view.addSubview(mapView!)
mapView?.translatesAutoresizingMaskIntoConstraints = false
mapView?.topAnchor.constraint(equalTo: view.topAnchor).isActive=true
mapView?.leftAnchor.constraint(equalTo: view.leftAnchor).isActive=true
mapView?.rightAnchor.constraint(equalTo: view.rightAnchor).isActive=true
mapView?.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 60).isActive=true
person Sin Sopheak    schedule 14.09.2018
comment
Ах! Так просто, но так далеко от того, о чем я думал. Спасибо! - person Ben; 14.09.2018