отладка макета пользовательского интерфейса iPhone - PullRequest
0 голосов
/ 30 марта 2010

У меня есть эта хроническая проблема с разработкой пользовательского интерфейса iPhone, когда иногда кажется, что представления появляются на экране в месте, отличном от того, о котором сообщает их свойство frame. Вот что я делаю, чтобы попытаться решить проблему:

UIView *currentView = self.view;
while (currentView!=nil)
{
   NSLog(@"frame: %f,%f,%f,%f", currentView.frame.origin.x, 
                                currentView.frame.origin.y,
                                currentView.frame.size.width,
                                currentView.frame.size.height);
   currentView = currentView.superview;
}

I ожидайте это должно показать мне координаты и размер каждого элемента вверх по иерархии от данного представления к корневому элементу UIWindow приложения, с координатами для каждого элемента относительно его родитель. Однако, похоже, это не так. В моей нынешней ситуации у меня есть пользовательский интерфейс, который я пытаюсь отлаживать, когда каждый раз, когда я поворачиваю устройство, весь пользовательский интерфейс сдвигается вверх или вниз на 20 пикселей, но кодовый блок выше показывает точно те же цифры каждый раз. Я попытался позвонить по вышеуказанному коду после второй задержки, но цифры все равно выходили одинаковыми каждый раз.

Кто-нибудь знает лучший способ проверки экранных координат элементов пользовательского интерфейса? Если я могу определить, когда кто-то не прав, я могу компенсировать проблему, когда она появляется.

1 Ответ

1 голос
/ 30 марта 2010

Некоторые вещи, которые вы можете попробовать:

  • Вместо собственного, вы можете использовать recursiveDescription метод UIView (без документов, но прекрасно работает). ( Ссылка )
  • Измените ваш код на NSLog точек в терминах других представлений, используя четыре метода, которые называются convert {Point, Rect}: {to, from} View :. Например, вызовите convertRect:fromView: в окне вашего приложения, передавая несколько кадров из подпредставлений.

У меня также ранее была странная ошибка размером не более 20 пикселей. Я никогда не решал ее на 100%, но у меня было две идеи, которые могли бы помочь:

  • Дважды проверьте, что вы вызываете makeKeyAndVisible на вашем window объекте при первом запуске приложения. Если ваше окно не установлено как «ключ», то некоторые тонкие странные вещи могут пойти не так.
  • Попробуйте найти точку в вашем коде при изменении размера кадра и сбросить ее. Возможно, вам придется использовать метод performSelector:withObject:afterDelay:, чтобы сбросить его после того, как ОС испортит его для вас. Прочтите этот пост по NSRunLoop , чтобы узнать, почему этот метод полезен.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...