我使用的是:
VC = [[SettingsViewController alloc] initWithNibName:nil bundle:nil];
尚未调用viewDidLoad
但是当我这样做时:
VC.view.frame = CGRectMake(...);
此时调用viewDidLoad。
但问题是,我在viewDidLoad
方法中没有使用我在上面的代码语句中传递的视图尺寸。
我认为它看到正在使用视图,所以是时候加载视图了,加载视图后必须将帧尺寸分配给视图。但是,如果我希望调用viewDidLoad
之前设置的视图尺寸,那么我可以在viewDidLoad
方法中使用这些尺寸。
像initWithFrame..
另外,我在视图控制器中没有视图尺寸。我必须从VC外部分配视图尺寸
所以可能在调用initWithNibName:bundle:
方法之后我可以将视图框架尺寸保存在某个变量中..但这看起来不是一个干净的解决方案,是吗?
答案 0 :(得分:3)
viewDidLoad
。 (惊奇)
所以当你在回复之前调用VC.view
时,将执行viewDidLoaded
,然后返回视图,并设置框架。
所以根据你目前的方法,这是不可能的
无论如何,为什么你需要viewDidLoad
中的视图框?也许你可以将那部分移动到viewWillAppear
/ viewDidAppear
,只有在视图即将出现时才会被调用
答案 1 :(得分: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(...)];