Как получить размеры пользовательского UIView, добавленного через раскадровку в initWithCoder:?
У меня есть пользовательский подкласс UIView, который добавляет subview программно во время инициализации. Я хочу, чтобы этот subview был такой же ширины, как пользовательский UIView.
Мой код отлично работает, если я программно добавляю пользовательский UIView. Однако, когда UIView инициализируется через StoryBoard, я не могу получить пользовательскую ширину UIView.
// Init programatically
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //WILL return width
NSLog (@"view: %f", self.bounds.size.width); //WILL return width
}
return self;
}
// Init from storyboard
- (id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if (self) {
NSLog (@"view: %f", self.frame.size.width); //Returns 0
NSLog (@"view: %f", self.bounds.size.width); //Returns 0
}
return self;
}
Когда initWithCoder: запускается StoryBoard, кадр и границы UIView возвращаются как 0.
Есть ли способ доступа к размерам UIView в initWithCoder? Или, по крайней мере, получить доступ к размерам до вызова drawRect:?
Спасибо.
Ответы
Ответ 1
Вместо того, чтобы устанавливать размеры subviews в функции init, установите его относительно пользовательского представления в методе layoutSubviews пользовательского представления. Выполнение этого здесь будет означать, что ширина подвью также всегда будет меняться в соответствии с шириной пользовательского представления, даже если вы измените размеры пользовательского представления в любой момент после инициализации.
Ответ 2
Вы можете повторно использовать стандартный вызов initWithFrame
.
- (id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
[self initWithFrame:[self frame]];
NSLog (@"view: %f", self.frame.size.width);
NSLog (@"view: %f", self.bounds.size.width);
}
return self;
}