Как определить, когда UIView изменил размер?
-
23-09-2019 - |
Вопрос
У меня есть UIViewController
это инициализируется правильным фреймом, однако где-то в моем коде фрейм искажается, и мне трудно определить, где именно.
В подобных ситуациях обычно удобно watch
переменная в отладчике, однако у меня нет способа получить доступ к свойству controller-> view-> frame в моем представлении переменной, поскольку это не переменная, это свойство (как ни удивительно)
Детализация UIView на дисплее переменных показывает несколько вещей, но я ничего не могу связать с фреймом, я подумал, возможно, это будет в layer
но это не так.
Есть ли какой-нибудь способ следить за изменениями в частном API?Я думаю, что нет, поскольку переменные по сути "скрыты", и поэтому вы не можете точно указать, что нужно watch
.
В качестве альтернативы, какой другой подход я мог бы использовать?Я уже пробовал подклассировать UIView, настроив представление моего UIViewController так, чтобы оно указывало на этот подкласс, и прервал метод setFrame, но, похоже, это не сработало.
Редактировать:метод подкласса UIView ДЕЙСТВИТЕЛЬНО сработал, мне просто нужно было настроить представление так, чтобы оно указывало на мой тестовый подкласс в viewDidLoad
и не тот init
способ.Оставляю этот вопрос открытым, поскольку я не уверен, что это лучший способ решения такого рода проблем...
Решение 2
Я обнаружил, что это можно сделать с помощью наблюдателей ключевых значений.
Другие советы
Подкласс вашего представления, которое вы хотите отслеживать, и перепишите метод setFrame:
@implementation MyTableView
- (void)setFrame:(CGRect)frame;
{
NSLog(@"%@", frame);
[super setFrame:frame];
}
@end
Затем используйте отладчик, чтобы добавить к нему точку останова и проверить, когда она будет вызвана.В конце концов, вы увидите, когда меняется кадр и откуда берется это изменение.
Вы могли бы создать ivar, view2, и просто присвоить его своему представлению в вашем loadView
способ.Это должно позволить вам просматривать его как обычную переменную.