2015-01-27 3 views
2

У меня есть UIViewController с обычным UINavigationBar (унаследованный от его суперкласса).Сделать снимок загружен из руководства по верстке сверху сверху сверху (верхняя панель навигации)

В этом контроллере я инстанцировании другой UIViewController и добавив его вид как подвид, на мой взгляд, как это:

// I believe this should be 'as LocationPermissionsInfoViewController' but it crashed badly that way. Any ideas? 
var permissionsView = UIViewController(nibName:"LocationPermissionsInfoView", bundle: nil) as UIViewController 

    self.view.addSubview(permissionsView.view) 
    permissionsView.view.frame = self.view.bounds 

LocationPermissionsInfoView разработан в IB с различными ограничениями autolayout. Тем не менее, я хочу, чтобы в этом представлении существовал «contentView», чтобы уважать руководство Top Layout (нижняя часть настраиваемой навигационной панели), который он добавил в качестве подвью. Сейчас IB, очевидно, только позволяет мне устанавливать ограничения в отношении представления верхнего уровня в интерфейсе.

Любые идеи о том, как я могу это достичь? В идеале от IB или где-то в LocationPermissionsInfoView контроллер.

ответ

3

Попробуйте один из следующих действий:

  • self.edgesForExtendedLayout = UIRectEdgeNone; Используйте в вашем вид
    метода -viewDidLoad контроллера. Это переведет начало.y на внизу навигационной панели.

  • Добавить ограничение в вашем контроллере представления, которое делает вид LocationPermissionsInfoView в качестве объекта topLayoutGuide. Поскольку вы добавляете представление программно, ограничение должно быть добавлено программно.

  • В LocationPermissionsInfoView добавьте ограничение, которое заставляет его соблюдать topLayoutGuide его супервизора. Опять же, это будет в коде (возможно, в методе -didMoveToSuperView). Удостоверьтесь, что присвойте этому ограничению значение 0CS3. В противном случае вы получите ошибки в иерархии представлений.

По существу, последние 2 варианта довольно много делает то же самое с тем же ограничением и различаются только в том, когда/где вы добавить это ограничение. Если вы используете LocationPermissionsInfoView в нескольких местах через приложение, было бы полезно использовать последний вариант.

+0

Спасибо, друг. Я буду исследовать и возвращаться, чтобы принять ответ, если он решает мою проблему. – Thanos

+0

@Thanos, КОТОРЫЙ из них решил вашу проблему? –

+0

Это также работает с видами, загруженными из раскадровки. –

0

Вы пробовали просто добавить еще один UIView верхнего уровня в IB? Таким образом, все ваши ограничения XIB относятся к этому виду вместо этого. Поэтому, когда вы добавляете этот subview в свой основной VC и устанавливаете границы, он должен уважать ваши ограничения.

var permissionsView : LocationPermissionsInfoView = UIViewController(nibName:"LocationPermissionsInfoView", bundle: nil) as UIViewController 

self.view.addSubview(permissionsView.viewMainContent) 
permissionsView.viewMainContent.frame = self.view.bounds 
+0

Что такое 'viewMainContent'? – Thanos

+0

Это новый UIView, который я предлагаю добавить в виде верхнего уровня внутри вашего XIB. Все ваши элементы управления должны идти туда и ограничивать это. Похоже, проблема заключается в том, что вы теряете все свои ограничения, так как вы меняете родительские взгляды. Этот подход позволит вам сохранить все ограничения на нижнем уровне, и поскольку вы устанавливаете фрейм для родительского представления, все должно работать как ожидалось – Oren

Смежные вопросы