Задание положения кадра UIImageView относительно родительского представления в Интерфейсном Разработчике отличается, когда установлено в коде? - PullRequest
1 голос
/ 15 марта 2011

У меня есть контроллер вида и вид. Затем я создаю UIImageView, созданный с помощью IB, и позиционирую его с помощью инспектора IB. Если для фрейма UIImageView установлено значение x, а для координаты y - 0, изображение будет размещено в верхнем левом углу представления ниже строки состояния.

Если я затем реализую метод viewDidLoad контроллера представления и установлю положение кадра UIImageView, используя:

myimageview.frame = CGRectMake(0, 0, 50, 50);

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

Кто-нибудь знает, почему между IB и кодом существует расхождение?


Полезная информация об отладке:

Примечание. Ширина и высота представления изображения на самом деле составляет 35x37. Вышеуказанные размеры были только для упрощения оригинального вопроса.

Информация о кадре перед установкой в ​​коде:

2011-03-15 13:15:34.249 MyAPP [98288:207] {{0, 49}, {35, 37}}

Информация о кадре после установки его в коде:

2011-03-15 13:15:34.250 MyAPP [98288:207] {{0, 0}, {35, 37}}

Как определено в Интерфейсном Разработчике:

Interface Builder

Как вы можете видеть, IB говорит, что координаты UIImageView X и Y равны 0, 0. Хотя в приведенной выше отладочной информации сказано, что на самом деле это 0, 49.

Ответы [ 3 ]

4 голосов
/ 15 марта 2011

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

Я предполагаю, что до

myimageview.frame = CGRectMake(0, 0, 50, 50);

myimageview.frameбудет установлен на то, что вы установили в конструкторе интерфейсов.Я бы предложил выполнить следующие строки, чтобы посмотреть, как вы меняете свойство frame:

NSLog(@"%@", NSStringFromCGRect(myimageview.frame));
myimageview.frame = CGRectMake(0, 0, 50, 50);
NSLog(@"%@", NSStringFromCGRect(myimageview.frame));

Это должно помочь вам понять разницу.

Кстати, координаты всегда относительно родительского представления.

1 голос
/ 23 марта 2011

Кажется, проблема была в том, что я столкнулся с ошибкой.Я перестроил пользовательский интерфейс в Интерфейсном Разработчике, и теперь он работает как положено.

1 голос
/ 15 марта 2011

Кадр относительно родительского объекта.Таким образом, 0,0 поместит вас в верхнем левом углу родительского представления.Если этот вид является вашим основным видом, то вы будете прямо под строкой состояния.Если у вас уже есть этот набор в IB, зачем вам его перемещать?Для того, что вы делаете, вы можете использовать bounds вместо этого, поскольку оно находится в пространстве самого объекта.Я мало пользуюсь IB, но может быть, вы устанавливаете границы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...