У меня есть подкласс UIView, который должен вычислять его высоту в соответствии с его шириной. При создании кода все работает. Однако, когда я пытаюсь создать представление в построителе интерфейса, и хотя я переопределяю все связанные методы, я не могу получить размер представления, заданного в построителе интерфейса.Загрузка подкласса UIView из проблем с размерами NIB
- (id)initWithCoder:(NSCoder *)aDecoder
{
NSLog(@"init with coder before super width %d",super.frame.size.width); // returns 0
self = [super initWithCoder:aDecoder];
NSLog(@"init with coder after super width %d",super.frame.size.width); // still returns 0
}
- (void) awakeFromNib
{
NSLog(@"width of view %d",super.frame.size.width); // Returns 0 as well
}
- (void) setFrame:(CGRect)aFrame
{
[super setFrame:aFrame]; // Called from initWithCoder by super. Correct frame size.
}
Так что мое следующее предположение было возможно SuperView моего зрения настройки кадра моего взгляда после awakeFromNib. Ну, оказывается, это не так. Я переопределил setFrame на моем представлении и вызывается во время initWithCoder.
Так это то, что я знаю, что до сих пор:
- Первый initWithCoder называется
- Во время initWithCoder вызов setFrame: (CGRect) AFRAME отправляется
- в setFrame размер кадра правильно, и я называю [супер setFrame: AFRAME]
- awakeFromNib называется
- super.frame.size.width = 0 в awakeFromNib self.frame.size.width также 0
- Когда процесс завершен, кажется, что представление находится в нескольких пикселях ниже, где оно должно быть, но я предполагаю, что мой код настолько скомбинирован с размерами, что это может быть что-то, что я делаю.
Любая помощь будет оценена
Вопрос на самом деле все не так сейчас. Я отправил сам ответ, который по какой-то причине был удален. Моя основная ошибка заключалась в использовании% d для печати размера кадра, когда это float. Это полностью отбросило меня. Насколько я понимаю, ваш ответ на самом деле ничего не делает. –