Iphone 使用autoresizingMask的UITableView大小错误

Iphone 使用autoresizingMask的UITableView大小错误,iphone,uitableview,uinavigationcontroller,uitabbarcontroller,autoresize,Iphone,Uitableview,Uinavigationcontroller,Uitabbarcontroller,Autoresize,我有一个UITableView,它没有使用autoresizeMask(在iPhone 3.0中)正确调整大小 UITableView位于UIAbbarController中的UIViewController中的UINavigationController中,所有这些都是通过编程方式创建的。状态栏可见 UIViewController的代码基本上是: - (void)loadView { UIView* rootView = [[UIView alloc] init]; self

我有一个UITableView,它没有使用autoresizeMask(在iPhone 3.0中)正确调整大小

UITableView位于UIAbbarController中的UIViewController中的UINavigationController中,所有这些都是通过编程方式创建的。状态栏可见

UIViewController的代码基本上是:

- (void)loadView {
    UIView* rootView = [[UIView alloc] init];
    self.view = rootView;
    [rootView release]; 
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480-20-49-44)];
    table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)]; table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:table];
}
这样创建时,UITableView略大于可用空间。如果我没弄错的话,它正好比导航栏大44像素

但是,如果我取消注释注释行并注释下一行,UITableView的大小就完全正确。我更喜欢使用autoresizingMask,而不是手动计算UITableView的大小。我做错了什么


提前谢谢你

自动调整大小掩码对表视图的初始大小没有帮助。表格视图是使用您提供的框架创建的。“自动调整大小”遮罩定义了当父视图的帧发生更改时,相对于父视图调整此帧大小的规则

因此,如果我定义一个320x100的表,它将保持该大小,除非我显式地更改它或父视图的帧更改


根据其他视图的不同,您可以根据父视图或父视图框架本身持有的其他视图进行计算。

问题似乎在于我没有在loadView中设置根视图的框架。如果定义这样的框架,然后定义子视图相对于该框架的框架,则自动调整大小掩码将根据框架调整根视图大小的方式正确调整子视图的大小

例如:

- (void)loadView {
    UIView* rootView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];
    self.view = rootView;
    [rootView release]; 
}

- (void)viewDidLoad {
    [super viewDidLoad];

    table = [[UITableView alloc] initWithFrame:self.view.frame]; 
    table.autoresizingMask = UIViewAutoresizingFlexibleHeight;
    [self.view addSubview:table];
}

感谢Colin Gislason为我指明了正确的方向。

创建UITableViewController子类的UIViewController子类instand

插入UITableView实例

在NIB中,只需拖放UIView即可

将现有UITableVIew对象放在该视图的顶部

通过nib或viewDidLoad方法设置uitableview的大小

通过nib设置引用、数据源和委托


现在只需传输UIViewController类,即可根据需要更改tableview大小。

谢谢您的快速回复,科林。自动调整大小掩码正在执行某些操作。创建的表视图大小为320x100,但它却占据了整个屏幕。我可以把100改成200,大小也一样。如果你不设置自动调整大小的遮罩,但仍然设置为320x100,它不会填满整个屏幕?没错。在没有设置自动调整大小掩码的情况下,表格视图将根据frame.Ok调整大小。然后UITableViewController必须调整表的大小。这些问题提供了证据,或许还有一个解决方案:我没有使用UITableViewController。我正在对UIViewController.hi Claus进行子类化,我尝试使用动态内容。但它将与静态内容一起工作。。。