У меня есть контроллер вида, который состоит из двух UIViews
. Один вид - супер-просмотр, а другой - подзаголовок. Оба представления имеют одинаковый размер 320X568 и имеют одинаковое происхождение (0,0). Я добавил ограничения на subview, сначала установив соотношение сторон к себе, а затем равное отношение ширины к супервину с множителем 1. Затем я центрировал subview горизонтально и вертикально в контейнере. Когда распознается жест перетаскивания, подпункт предполагает перемещение вверх по определенной величине с использованием CGRectOffset
. Я заметил, что представление не заканчивается в правильном положении, поэтому я удалил весь код смещения, чтобы увидеть, что происходит. В viewDidLoad
Я проверяю origin.y как супер view, так и subview и его 0 - это правильно. Однако, когда распознается жест перетаскивания, я делаю еще NSLog
для y-истоков, а subview-отпечатки -31.5, а супервизор печатает 64. Не знаю, как это происходит со всеми CGRectOffset
закомментировано. Я думаю, что это может быть связано с навигационной панелью, но я не уверен.Навигационная панель, вызывающая смещение UIView
ответ
Я не знаю, что такое сделка с CGRectOffset, но я знаю, что такое «проблема» без нее. Нет проблем! Единственное, что вы видите, это то, что вы слишком быстро проверяете origin.y
просмотров , а именно в viewDidLoad
.
Помните, что в viewDidLoad
ничего не произошло. Контроллер вида имеет вид, но вот и все. Частью, в частности, является еще не было в интерфейсе и имеет не был размещён планшет.
Так что это действительно вопрос знания того, что означают события. Вы предполагаете, что viewDidLoad
означает, что представление находится в интерфейсе и имеет его положение и размер. Это ничего не значит. Если вы хотите знать, какова позиция представления после макета, вам нужно подождать, пока после макета. Например, viewDidLayoutSubviews
- хорошее место. Это означает, что макет только что произошел!
Что касается значения 64, это то, что вы ожидаете. Вы привязали верхнюю часть вашего представления к верхней направляющей макета, что означает нижнюю часть панели навигации, как вы уже сказали.
- 1. Навигационная панель, вызывающая проблемы
- 2. Навигационная панель перекрывает UIView [Swift]
- 3. Навигационная панель Панель управления контроллером UIView?
- 4. Навигационная панель titleView alignment
- 5. Навигационная панель не меняет вид
- 6. Анимация UIView, вызывающая метод
- 7. Навигационная панель и верхнее поле
- 8. Навигационная панель Subview с Xib
- 9. Навигационная панель и кнопка
- 10. CSS Навигационная панель анимации
- 11. Навигационная панель (iphone)
- 12. Навигационная панель не отображается
- 13. Навигационная панель Изменение высоты
- 14. Нижняя фиксированная навигационная панель
- 15. Навигационная панель Расширение iOS
- 16. Навигационная панель Пользовательская кнопка
- 17. Навигационная панель в центр
- 18. Навигационная панель пользовательской высоты
- 19. Навигационная панель Барная стойка
- 20. Bootstrap 3.2 Навигационная панель
- 21. Нежелательная двойная навигационная панель
- 22. Навигационная панель + presentModalViewController
- 23. Навигационная панель макета
- 24. Навигационная панель кнопка image
- 25. Навигационная панель не работает
- 26. Навигационная панель blink
- 27. Навигационная панель не центрирована
- 28. Навигационная панель не отображается?
- 29. Навигационная панель и AVCaptureSession
- 30. Навигационная панель между действиями
Имеет смысл. Я понимаю, почему у супервизора есть origin.y из 64, но почему subview имеет источник -32. – Brosef
Я не могу волшебно видеть в вашем раскадровке, так что не знаю, как это выложено его ограничениями. Но это результат; это так, потому что так вы его настраиваете, вот и все, что я могу вам сказать. – matt
Итак, после 'viewDidLoad' начало супервизора находится на 64 с высотой 504 - имеет смысл. Для subview я устанавливаю его вертикальное пространство в верхний макет с константой -64. Теперь его положение и высота составляют -64 и 568. Я немного смущен, где происхождение. Предполагается, что это будет с навигационной панелью. – Brosef