Swift Programmati c Ограничение не работает - PullRequest
1 голос
/ 09 июля 2020

Я пытаюсь создать uiview, внутри которого есть элемент управления сегментом. Я хочу иметь возможность добавить этот uiview в представление моего контроллера просмотра. элемент управления сегментом должен находиться прямо над моей таблицей. но каждый раз, когда я устанавливаю ограничения, я продолжаю получать эту ошибку «Поток 1: Исключение:» Невозможно активировать ограничение с помощью якорей и потому что у них нет общего предка. Указывает ли ограничение или его якоря на элементы в разных иерархиях представлений? Это незаконно "." Я попытался обойтись, добавив сначала подпредставление, а что нет, но это не работает. вот мой код, если кто-нибудь может мне помочь.

    func configureTableView(){
    setupSegmentControl()
    view.addSubview(tableView)
    
    setTableViewDelegates()
    tableView.rowHeight = 50
    tableView.translatesAutoresizingMaskIntoConstraints = false
    tableView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
    tableView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true
    tableView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
    self.tableView.topAnchor.constraint(equalToSystemSpacingBelow: self.view.topAnchor, multiplier: 20).isActive = true
    tableView.register(UINib(nibName: "CustomCellNSB2", bundle: nil), forCellReuseIdentifier: "CustomCellNSB2")
}
func setTableViewDelegates(){
    tableView.delegate = self
    tableView.dataSource = self
}
func setupSegmentControl(){

    var headerView = UIView()
    var importanceSegmentControl = CustomSegmentControl()
    headerView.addSubview(importanceSegmentControl)

    self.view.addSubview(headerView)



    importanceSegmentControl.addTarget(self, action: #selector(indexChanged(control:)),for: UIControl.Event.valueChanged)


    headerView.translatesAutoresizingMaskIntoConstraints = false
    headerView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor, constant: 20).isActive = true
    headerView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20).isActive = true
    headerView.bottomAnchor.constraint(equalTo: self.tableView.topAnchor, constant: 20).isActive = true
    headerView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 10).isActive = true
    
    importanceSegmentControl.translatesAutoresizingMaskIntoConstraints = false
    importanceSegmentControl.leadingAnchor.constraint(equalTo: headerView.leadingAnchor, constant: 20).isActive = true
    importanceSegmentControl.trailingAnchor.constraint(equalTo: headerView.trailingAnchor, constant: -20).isActive = true
    importanceSegmentControl.bottomAnchor.constraint(equalTo: headerView.topAnchor, constant: 20).isActive = true
    importanceSegmentControl.topAnchor.constraint(equalTo: headerView.topAnchor, constant: 10).isActive = true
}

1 Ответ

1 голос
/ 09 июля 2020

У tableView и importanceSegmentControl нет общего предка на момент добавления ограничения к importanceSegmentControl. Поэтому, чтобы решить проблему, просто измените порядок выполнения:

func configureTableView(){
    view.addSubview(tableView)
    setupSegmentControl()
    //...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...