Ограничение UINavigationКонтроллер навигацииБар якоря - PullRequest
0 голосов
/ 16 декабря 2018

Я пытаюсь ограничить представление на 100%, как navigationBar из UINavigationController.Следующее не работает ...

view.addSubview(someView)

someView.translatesAutoresizingMaskIntoConstraints = false

NSLayoutConstraint.activate([
    someView.leadingAnchor.constraint(equalTo: navigationBar.leadingAnchor),
    someView.trailingAnchor.constraint(equalTo: navigationBar.trailingAnchor),
    someView.topAnchor.constraint(equalTo: navigationBar.topAnchor),
    someView.bottomAnchor.constraint(equalTo: navigationBar.bottomAnchor)
])

Но замена любого из первых трех ограничений на view делает someView видимым.Это, например, работает:

NSLayoutConstraint.activate([
    someView.leadingAnchor.constraint(equalTo: navigationBar.leadingAnchor),
    someView.trailingAnchor.constraint(equalTo: navigationBar.trailingAnchor),
    someView.topAnchor.constraint(equalTo: view.topAnchor),
    someView.bottomAnchor.constraint(equalTo: navigationBar.bottomAnchor)
])

Ограничение tabBar внутри UITabBarController на другой стороне работает, даже когда все ограничено tabBar:

NSLayoutConstraint.activate([
    someView.leadingAnchor.constraint(equalTo: tabBar.leadingAnchor),
    someView.trailingAnchor.constraint(equalTo: tabBar.trailingAnchor),
    someView.topAnchor.constraint(equalTo: tabBar.topAnchor),
    someView.bottomAnchor.constraint(equalTo: tabBar.bottomAnchor)
])

Яхорошо с обходным решением, но мне интересно, почему он не работает, когда ограничивается только navigationBar.Есть ли лучший способ, чтобы someView имел тот же размер и положение, что и navigationBar?

1 Ответ

0 голосов
/ 16 декабря 2018

Если вы добавляете свое подпредставление как подпредставление view и устанавливаете ограничения только на navigationBar, у них нет общих предков, так как вы получаете сообщение об ошибке:

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

... похоже, если вы установите хотя бы одно ограничение равное view, теперь ваш someView знает, что у него есть что-то общее со своим суперпредставлением view кактакже как и с navigationBar.

Один из способов решения вашей проблемы был бы, если бы вы просто добавили свое представление в NavigationBar

navigationBar.addSubview(someView)

Примечание: я проверил ваш код, и он не 't работать с установочными ограничениями, равными якорям TabBar

...