使用autoresizingMask的UITableView的大小错误

时间:2009-12-15 16:42:02

标签: iphone uitableview uinavigationcontroller uitabbarcontroller autoresize

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

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

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的大小。我做错了什么?

提前谢谢!

3 个答案:

答案 0 :(得分:2)

问题似乎是我没有在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指出了我正确的方向。

答案 1 :(得分:1)

自动调整遮罩无法帮助您处理表格视图的初始大小。使用您提供的框架创建表视图。自动调整遮罩定义了当父框架更改时相对于父视图调整此框架大小的规则。

因此,如果我定义一个320x100的表,它将保持该大小,除非我明确地更改它或者父视图的帧发生更改。

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

答案 2 :(得分:0)

创建UITableViewController Subclass的UIViewController子类inst。

插入UITableView实例。

NIB中的

只需拖放UIView

即可

在那个更重要的地方放置现有的UITableVIew对象。

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

通过nib设置引用,dataSource和delegate。

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