0

我正在使用类似的东西:
VC = [[SettingsViewController alloc] initWithNibName:nil bundle:nil];

viewDidLoad 尚未调用。
但是当我这样做时:
VC.view.frame = CGRectMake(...);

此时 viewDidLoad 被调用。

但问题是,我在上述代码语句中传递的视图尺寸并未在该viewDidLoad方法中使用。
我认为它看到正在使用视图,所以是时候加载视图了,加载视图后,它必须将框架尺寸分配给视图。但是,如果我希望在viewDidLoad调用之前设置视图尺寸,以便我可以在viewDidLoad方法中使用这些尺寸..
initWithFrame..

另外,我在视图控制器中没有视图尺寸。我必须从 VC 外部分配视图尺寸。
所以可能在调用initWithNibName:bundle:方法之后,我可以将视图框架尺寸保存在某个变量中。但这看起来不像是一个干净的解决方案,是吗?

4

2 回答 2

3

viewDidLoad在视图加载时调用。(惊喜)

所以在你调用的时候VC.view,在它返回之前,viewDidLoaded将执行然后返回视图,并设置框架。

所以从你目前的方法来看,这是不可能的

无论如何,为什么你需要视图框架viewDidLoad?也许您可以将该部分移动到viewWillAppear/viewDidAppear仅在视图即将呈现时才被调用

于 2013-04-10T09:00:23.403 回答
2

你可以这样做:

在界面中

@interface SettingsViewController : ... {
    CGRect _initialFrame;
}

...

- (id)initWithFrame:(CGRect)frame;

@end

在实施中

- (id)initWithFrame:(CGRect)frame 
{
    self = [super initWithNibName:nil bundle:nil];
    if (self) {
        _initialFrame = frame;
    }

    return self;
}

- (void)viewDidLoad
{
    self.view.frame = _initialFrame;

    [super viewDidLoad];
}

然后从你使用这些控制器的类中:

VC = [[SettingsViewController alloc] initWithFrame:CGRectMake(...)];
于 2013-04-10T09:04:53.987 回答