Подтвердить что ты не робот

Границы NSView против кадра

Какая разница между границами и рамкой? На самом деле, почему существуют "границы"? Размер "границ" равен размеру кадра, а связанное начало всегда должно быть 0,0.

4b9b3361

Ответ 1

В Архитектура просмотра и окна Руководство по программированию для iOS:

Объект вида отслеживает его размер и местоположение, используя его фрейм, границы, и свойства центра:

Свойство фрейм содержит прямоугольник рамки, который указывает размер и расположение представления в системе координат супервизора.

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

Свойство центра содержит известную центральную точку вида в супервизор системы координат.

Вот хорошая визуализация этого объяснения:

enter image description here

Ответ 2

Связанное начало не всегда равно 0,0. Легко понять разницу между фреймом и границами, если вы смотрите, как свойство ограничений границ UIScrollView во время прокрутки.

Например, у вас есть UIScrollView с фреймом (0, 0, 320, 460), ограничениями (0, 0, 320, 460) и ContentSize (640, 460). Его рамка всегда будет (0, 0, 320, 460), но координата X координат будет меняться в зависимости от расстояния прокрутки.

Это может быть полезно, если вы хотите что-то изменить в UIScrollView (например, создавать и удалять страницы, например,), чтобы вы знали расстояние прокрутки.

Ответ 3

Яблочные документы в первом ответе не покрывают то, что происходит с фреймом и границами после поворота в альбомную ориентацию. Чтобы быть более полным, вы должны знать, что рамка окна и корневой вид не изменяется после вращения, но границы выполняются. См. эту статью для получения более подробной информации и будьте осторожны с использованием фрейма в качестве ссылки для чего-либо, кроме портретной ориентации.

Из статьи:

Если ваш контроллер просмотра имеет вид верхнего окна верхнего уровня (т.е. его самый нижний контроллер), затем

self.frame

всегда находится в портретной ориентации. Wha? Да, всегда в портрете - какие изменения превращают ваше мнение. Итак, ваш

self.bounds

всегда точная (имея в виду последнюю точку), но

self.frame

может или не может указывать пропорции, которые пользователь действительно видит, поскольку каждый кадр представления сообщается с точки зрения супервизоров координат и принимает во внимание любые преобразования, применяемые к вид.

Ответ 4

Кадр вида - это размер прямоугольника, в который он может полностью вписаться. Кажется, что границы и рамки одинаковы, но это не так. Рассмотрим квадрат, который просто повернут примерно на 45 градусов!

Здесь рамка этого повернутого квадрата будет прямоугольником, чтобы полностью заполнить его и поэтому он будет отличаться от границ этого объекта.

P.S в основном во вращающихся объектах рамы и границы имеют тенденцию отличаться.