Расположение кнопки в правом нижнем углу экрана - PullRequest
0 голосов
/ 10 февраля 2020

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

Вот мой код:

  1. добавить маркеры
  2. добавить вид карты
  3. добавить кнопку

здесь, где я добавляю маркеры:

func secondfunction() {

        for x in names{
            let url1 = URL(string: url: ", url1)
            let data1 = try? Data(contentsOf: url1!) //make sure your image in this url does exist
            //self.imagesOne = UIImage(data: data1!)
            self.images.append(UIImage(data: data1!)!)
        }

        self.loadFunction()
    }

здесь, где я загружаю карту и добавить кнопку:

  func loadFunction()
        {

            mapView = MGLMapView(frame: view.bounds)
            mapView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

            mapView.centerCoordinate = CLLocationCoordinate2D(latitude:xCoord, longitude: yCoord)

            mapView.zoomLevel = 15
            mapView.delegate = self
            view.addSubview(mapView)

            var pointAnnotations = [MGLPointAnnotation]()
            for coordinate in locationsList {
                let location: CLLocationCoordinate2D = CLLocationCoordinate2D(latitude: coordinate.latitude, longitude: coordinate.longitude)
                let point = MGLPointAnnotation()
                point.title = "Tap here"
                point.coordinate = location
                pointAnnotations.append(point)
            }

            self.tabBarController?.tabBar.isHidden = false

            mapView.addAnnotations(pointAnnotations)

            button.setBackgroundImage(UIImage(named:"compass.png"), for: .normal)
            button.addTarget(self, action: #selector(btnPressed), for: UIControl.Event.touchUpInside)

            self.view.addSubview(button)


            button.translatesAutoresizingMaskIntoConstraints = false
            let widthContraints =  NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 40)

            let heightContraints = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 40)

            let xContraints = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.bottomMargin, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.bottomMargin, multiplier: 1, constant: -80)

            let yContraints = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: -80)

            NSLayoutConstraint.activate([heightContraints,widthContraints,xContraints,yContraints])

        }

Ответы [ 3 ]

3 голосов
/ 10 февраля 2020

Задайте ограничение кнопки снизу, как это .. это работает проверенный код

override func viewDidLoad() {
    super.viewDidLoad()

           button.backgroundColor = .red
           self.view.addSubview(button)
}
override func viewDidLayoutSubviews() {


    button.translatesAutoresizingMaskIntoConstraints = false
    let widthContraints =  NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.width, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 40)

    let heightContraints = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.height, relatedBy: NSLayoutConstraint.Relation.equal, toItem: nil, attribute: NSLayoutConstraint.Attribute.notAnAttribute, multiplier: 1, constant: 40)

    let xContraints = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.bottomMargin, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.bottomMargin, multiplier: 1, constant: -20)

    let yContraints = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.trailing, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.trailing, multiplier: 1, constant: -20)

    NSLayoutConstraint.activate([heightContraints,widthContraints,xContraints,yContraints])
}

, если вы хотите расположить его правильно, задайте ограничение с правого поля

измените константу в соответствии с Ваше предпочтение дизайна

enter image description here

1 голос
/ 10 февраля 2020

Похоже, вы делаете ограничения в коде. Могу ли я предложить более свежую альтернативу? Используйте якоря, которые намного проще и являются частью любого подкласса UIView.

. Для вида есть несколько якорей - верхний, нижний, левый или ведущий, правый или конечный , центр x и Y, и высота / ширина наиболее часто используются.

Теперь для любого вида вам нужно сделать две вещи:

  • Расположите его. В вашем случае вам нужно только расположить кнопку в нижнем или нижнем (б) правом или заднем.

  • Если она не имеет intrinsi c* Размер 1017 * (ищите лучшее определение, чем я могу дать) придадут вашему взгляду высоту и ширину.

Итак, в вашем случае, скажем, вы w * sh для позиционирования UIButton, который смещен на 10 пунктов от нижнего правого края экрана. (Имейте в виду, что Apple представила «вставки для безопасной зоны», но это тема для другого вопроса. Опять же, найдите ее, и вы найдете множество примеров.)

button.translatesAutoresizingMaskIntoConstraints = false

Всегда помните чтобы сделать это!

Теперь давайте дадим вашей кнопке размер:

button.widthAnchor.constraint(equalToConstant: 100).isActive = true
button.heightAnchor.constraint(equalToConstant: 50).isActive = true

Наконец, поместите ее:

button.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -10).isActive = true
button.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -10).isActive = true

Вот и все! Код менее многословен и, следовательно, его легче читать.

Помимо базовых (и безопасных областей), вы также можете программно сделать еще две вещи:

  • Изменить константы (и для некоторые представления, множитель), пока вы имя ограничение.
  • Выборочно активировать / деактивировать массив ограничений, опять же, если вы устанавливаете их в массиве.

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

1 голос
/ 10 февраля 2020

Удалите это верхнее ограничение

let xContraints = NSLayoutConstraint(item: button, attribute: NSLayoutConstraint.Attribute.topMargin, relatedBy: NSLayoutConstraint.Relation.equal, toItem: view, attribute: NSLayoutConstraint.Attribute.topMargin, multiplier: 1, constant: 20)

и добавьте нижнее ограничение

NSLayoutConstraint.activate([
    button.bottomAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.bottomAnchor, constant: -20),
    button.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20),
    button.widthAnchor.constraint(equalToConstant: 40),
    button.heightAnchor.constraint(equalToConstant: 40)
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...