Вопрос

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

В подобных ситуациях обычно удобно watch переменная в отладчике, однако у меня нет способа получить доступ к свойству controller-> view-> frame в моем представлении переменной, поскольку это не переменная, это свойство (как ни удивительно)

Детализация UIView на дисплее переменных показывает несколько вещей, но я ничего не могу связать с фреймом, я подумал, возможно, это будет в layer но это не так.

Есть ли какой-нибудь способ следить за изменениями в частном API?Я думаю, что нет, поскольку переменные по сути "скрыты", и поэтому вы не можете точно указать, что нужно watch.

В качестве альтернативы, какой другой подход я мог бы использовать?Я уже пробовал подклассировать UIView, настроив представление моего UIViewController так, чтобы оно указывало на этот подкласс, и прервал метод setFrame, но, похоже, это не сработало.

Редактировать:метод подкласса UIView ДЕЙСТВИТЕЛЬНО сработал, мне просто нужно было настроить представление так, чтобы оно указывало на мой тестовый подкласс в viewDidLoad и не тот init способ.Оставляю этот вопрос открытым, поскольку я не уверен, что это лучший способ решения такого рода проблем...

Это было полезно?

Решение 2

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

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueObserving/KeyValueObserving.html

Другие советы

Подкласс вашего представления, которое вы хотите отслеживать, и перепишите метод setFrame:

@implementation MyTableView

- (void)setFrame:(CGRect)frame;
{
    NSLog(@"%@", frame);
    [super setFrame:frame];
}

@end

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

Вы могли бы создать ivar, view2, и просто присвоить его своему представлению в вашем loadView способ.Это должно позволить вам просматривать его как обычную переменную.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top