Я создаю приложение, используя Swift 5, Xcode 11.3.1. Первоначально я создал приложение с использованием раскадровки в Swift, однако сейчас я работаю через приложение, реализуя метки, текстовые поля, палитры, переключатели, кнопки и т. Д. c программно. Однако, я столкнулся с загадкой, пытаясь программно кодировать одну из моих сцен с использованием MKMapView, который я создал изначально с раскадровкой.
Когда я создавал с использованием раскадровки, мой экран / сцена делится на 3 секции / области с первыми 100 точками (CGFloat pts), используемыми для отображения некоторого текста. Тогда у меня есть MKMapView от pt 106 с высотой 413pt. MKMapView простирается до краев и, таким образом, представляет собой квадрат (i sh) ... Нижняя часть экрана / сцены используется для отображения некоторого текста, пары UIS-переключателей и пользовательской кнопки. В MKMapView у меня также есть маркер, который отображает центральную точку и местоположение пользователя, чтобы пользователь мог прокрутить карту к другой точке на карте, которая обозначена маркером в центре карты.
Итак, вот где все идет не так ... Я пытаюсь определить тот же тип внешнего вида для MKMapView программно, однако он продолжает отображать карту в полноэкранном режиме и поэтому перезаписывает верхнюю и нижнюю области, которые я использую для отображения текста и кнопок. Я не смог понять, почему MKMapView не придерживается установленного кадра или ограничений. Моя первая попытка состояла в том, чтобы определить фрейм, однако затем я немного прочитал и решил, что мне нужно также кодировать ограничения. Однако теперь, когда приложение запускает ограничения (первое из них), приложение запускается с ошибкой ....
2020-03-14 21: 43: 57.509878 + 1100 MyGarageApp [17060: 95627 ] * Завершение работы приложения из-за необработанного исключения «NSGenericException», причина: «Невозможно активировать ограничение с помощью якорей, и потому что у них нет общего предка. Указывает ли ограничение или его привязки на элементы в разных иерархиях представления? Это незаконно. * Первый стек вызовов вызовов:
Вот мой код для отображения карты:
[Этот фрагмент кода находится перед моим viewDidLoad]
// Early IBOutlets required to define the scene
var theMapView: MKMapView!
@IBOutlet weak var addressLabelOutlet: UILabel!
let centerMapButton: UIButton = {
let button = UIButton(type: .system)
button.setImage(UIImage(named: "MapPointer.png"), for: .normal)
button.addTarget(self, action: #selector(handleCenterOnUserLocation), for: .touchUpInside)
button.translatesAutoresizingMaskIntoConstraints = false
return button
}()
следующий фрагмент кода - это метод после моего раздела viewDidLoad (ie. внутри моих методов тела) ...
func configureMapView() {
theMapView = MKMapView(frame: CGRect(x: 0, y: 106, width: self.view.frame.width, height:413))
theMapView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 10).isActive = true
theMapView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 106).isActive = true
theMapView.heightAnchor.constraint(equalToConstant: 413).isActive = true
theMapView.widthAnchor.constraint(equalToConstant: 355).isActive = true
theMapView.showsUserLocation = true
theMapView.userTrackingMode = .follow
theMapView.frame = view.frame
view.addSubview(theMapView)
}
Любое руководство, которое кто-либо может дать для решения этого программного вопроса, будет высоко оценено как Я стремлюсь избавиться от ограничений раскадровки и иметь возможность контролировать мой код, чтобы правильно обслуживать устройства.
Заранее благодарю всех.