2014-12-09 3 views
0

У меня есть контроллер вида, который состоит из двух UIViews. Один вид - супер-просмотр, а другой - подзаголовок. Оба представления имеют одинаковый размер 320X568 и имеют одинаковое происхождение (0,0). Я добавил ограничения на subview, сначала установив соотношение сторон к себе, а затем равное отношение ширины к супервину с множителем 1. Затем я центрировал subview горизонтально и вертикально в контейнере. Когда распознается жест перетаскивания, подпункт предполагает перемещение вверх по определенной величине с использованием CGRectOffset. Я заметил, что представление не заканчивается в правильном положении, поэтому я удалил весь код смещения, чтобы увидеть, что происходит. В viewDidLoad Я проверяю origin.y как супер view, так и subview и его 0 - это правильно. Однако, когда распознается жест перетаскивания, я делаю еще NSLog для y-истоков, а subview-отпечатки -31.5, а супервизор печатает 64. Не знаю, как это происходит со всеми CGRectOffset закомментировано. Я думаю, что это может быть связано с навигационной панелью, но я не уверен.Навигационная панель, вызывающая смещение UIView

ответ

0

Я не знаю, что такое сделка с CGRectOffset, но я знаю, что такое «проблема» без нее. Нет проблем! Единственное, что вы видите, это то, что вы слишком быстро проверяете origin.y просмотров , а именно в viewDidLoad.

Помните, что в viewDidLoad ничего не произошло. Контроллер вида имеет вид, но вот и все. Частью, в частности, является еще не было в интерфейсе и имеет не был размещён планшет.

Так что это действительно вопрос знания того, что означают события. Вы предполагаете, что viewDidLoad означает, что представление находится в интерфейсе и имеет его положение и размер. Это ничего не значит. Если вы хотите знать, какова позиция представления после макета, вам нужно подождать, пока после макета. Например, viewDidLayoutSubviews - хорошее место. Это означает, что макет только что произошел!

Что касается значения 64, это то, что вы ожидаете. Вы привязали верхнюю часть вашего представления к верхней направляющей макета, что означает нижнюю часть панели навигации, как вы уже сказали.

+0

Имеет смысл. Я понимаю, почему у супервизора есть origin.y из 64, но почему subview имеет источник -32. – Brosef

+0

Я не могу волшебно видеть в вашем раскадровке, так что не знаю, как это выложено его ограничениями. Но это результат; это так, потому что так вы его настраиваете, вот и все, что я могу вам сказать. – matt

+0

Итак, после 'viewDidLoad' начало супервизора находится на 64 с высотой 504 - имеет смысл. Для subview я устанавливаю его вертикальное пространство в верхний макет с константой -64. Теперь его положение и высота составляют -64 и 568. Я немного смущен, где происхождение. Предполагается, что это будет с навигационной панелью. – Brosef

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