2017-01-29 14 views
0

Я пытаюсь включить контейнер UIView прямо над моим tabBar, однако он, похоже, не отображается на моем представлении, потому что я считаю, что это проблемы ограничения. Я бы хотел, чтобы мой контейнерный вид выглядел так на вид. enter image description hereпроблемы с ограничением просмотра контейнера программно

Однако мой контейнер вообще не отображается. Вот мой код:

self.mapContainer.layer.cornerRadius = 8 
    self.mapContainer.backgroundColor = UIColor.cyan 
    self.mapContainer.translatesAutoresizingMaskIntoConstraints = false 
     self.mapContainer.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    view.addSubview(self.mapContainer) 

    //constraints of the map view 
     let heightTabBar = self.tabBarController?.tabBar.frame.size.height 
     self.mapContainer.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant : (heightTabBar)! + 220).isActive = true 
     self.mapContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 
     //self.topContainer.heightAnchor.constraint(equalTo: view.heightAnchor).isActive = true 
     self.mapContainer.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.3).isActive = true 
     //self.mapContainer.widthAnchor.constraint(equalTo: view.widthAnchor).isActive = true 
     self.mapContainer.leadingAnchor.constraint(equalTo: view.trailingAnchor, constant: 20).isActive = true 
     self.mapContainer.trailingAnchor.constraint(equalTo: view.leadingAnchor, constant: 40).isActive = true 

, где я буду неправильно здесь, где мой контейнер не отображается ?

ответ

1

Проблема:

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

Решение:

Вместо добавления с (equalTo: view.bottomAnchor, constant : (heightTabBar)! + 220) вы должны вычитать с self.mapContainer.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant : -(heightTabBar! + 220)).isActive = true в вашем bottomAnchor. Вы также должны сделать свой ведущий якорь контейнера зависеть от ведущего якоря представления, то же самое для трейлинг-привязки. Также вам нужно установить отрицательное значение для вашей константы для вашего привязанного якоря, чтобы добавить дополнение с правой стороны. Имейте в виду: Если вы хотите, чтобы нажать сверху и слева, то добавить и если вы хотите, чтобы нажать справа и снизу, то вычтите

Это должно помочь вам (Подсказки в комментариях к коду):

import UIKit 

class ViewController: UIViewController { 

    var mapContainer:UIView! 

    override func loadView() { 
    super.loadView() 

    view.backgroundColor = .white 

    self.mapContainer = UIView() 
    self.mapContainer.layer.cornerRadius = 8 
    self.mapContainer.backgroundColor = UIColor.cyan 
    self.mapContainer.translatesAutoresizingMaskIntoConstraints = false 
    self.mapContainer.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    view.addSubview(self.mapContainer) 


    //constraints of the map view 
    let heightTabBar = self.tabBarController?.tabBar.frame.size.height 
    // You need to subtract to push from the bottom of the view 
    self.mapContainer.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant : -(heightTabBar! + 220)).isActive = true 
    self.mapContainer.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 
    self.mapContainer.heightAnchor.constraint(equalTo: view.heightAnchor, multiplier: 0.3).isActive = true 

    // Your leading anchor of map container should depend on the leading anchor of the view 
    self.mapContainer.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20).isActive = true 
    // Your trailingAnchor anchor of map container should depend on the trailingAnchor anchor of the view 
    // Here you need to subtract to push from the right 
    self.mapContainer.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20).isActive = true 
    } 
} 

Результат должен выглядеть примерно так:

enter image description here

Результат на iPhone5S тренажере:

enter image description here

+0

Спасибо так много. Я смог сделать эту работу так, как я хотел, основываясь на вашем решении для iphone 6, однако он, похоже, не работает на iphone 5S. Вы случайно не знаете почему? – Aboogie

+0

Да, рад, что я мог вам помочь! Я думаю, что позже я посмотрю, какая причина может быть, но если этот ответ решает этот вопрос, вы должны создать новый вопрос с вашим текущим кодом и объяснить свою новую проблему, и вы можете связать его здесь в комментарии. – ronatory

+0

Протестировано в симулятор с iPhone5s, и это выглядит хорошо для меня. Возможно, вы можете описать в новом вопросе то, что вы ожидаете, и что не работает для вас на iPhone5S по сравнению с iPhone6 ​​@Aboogie – ronatory