如何在initWithCoder中通过storyboard添加自定义UIView的维度:?

So *_* It 15 objective-c uiview uistoryboard

我有一个自定义的UIView子类,它在初始化过程中以编程方式添加子视图.我希望这个子视图与自定义UIView的宽度相同.

如果我以编程方式添加自定义UIView,我的代码工作正常.但是,当通过StoryBoard初始化UIView时,我无法获得自定义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;
}
Run Code Online (Sandbox Code Playgroud)

当initWithCoder:由StoryBoard运行时,UIView的框架和边界都返回为0.有没有办法 initWithCoder 中访问UIView的尺寸?或者,至少调用drawRect:之前访问维度?

谢谢.

Bre*_*ett 13

不是在init函数中设置子视图维度,而是在自定义视图的layoutSubviews方法中相对于自定义视图进行设置.在这里做这将意味着子视图的宽度也将随时更改,即使您更改自定义视图的维度在初始化后的任意点相匹配的自定义视图的宽度.

  • 要添加更多解释,如果您正在使用Autolayout(我认为您是),那么在布局发生之后,视图控制器的视图及其子视图的边界才可用 - 在视图控制器上调用`viewDidLayoutSubviews`在此之后发生了. (4认同)