Какая разница между границами и рамкой? На самом деле, почему существуют "границы"? Размер "границ" равен размеру кадра, а связанное начало всегда должно быть 0,0.
Границы NSView против кадра
Ответ 1
В Архитектура просмотра и окна Руководство по программированию для iOS:
Объект вида отслеживает его размер и местоположение, используя его фрейм, границы, и свойства центра:
Свойство фрейм содержит прямоугольник рамки, который указывает размер и расположение представления в системе координат супервизора.
Свойство bounds содержит прямоугольник границ, который определяет размер представления (и его содержимого) в представлениях собственных локальных системы координат.
Свойство центра содержит известную центральную точку вида в супервизор системы координат.
Вот хорошая визуализация этого объяснения:
Ответ 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 в основном во вращающихся объектах рамы и границы имеют тенденцию отличаться.