正确调整UIViewController的视图大小

时间:2012-01-03 03:34:55

标签: objective-c ios uitableview uiviewcontroller

在处理了这个issue这么多小时而没有任何运气之后,我正在通过在我的UIViewController的loadView中以编程方式创建视图来尝试不同的方法。我的UIToolbar中有UITableViewUIViewController,但在将视图添加为另一个UIView的子视图时,我无法确定大小。这是我到目前为止所得到的:

在我的自定义UIViewController'loadView:

{

    [super loadView];

    //this doesn't seem right!?!?
    self.view.frame = CGRectMake(0, 0, 400, 300);

    //create the Tool Bar
    self.toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 45.01)];

    [self.toolbar setBarStyle:UIBarStyleDefault];
    [self.toolbar setAutoresizesSubviews:TRUE];
    [self.toolbar setAutoresizingMask:(UIViewAutoresizingFlexibleWidth)]; 

    // create the array to hold the buttons, which then gets added to the toolbar
    NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:1];

    //create buttons
    UIBarButtonItem* bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:nil];
    bi.style = UIBarButtonItemStyleBordered;
    [buttons addObject:bi];

    //add buttons to the toolbar
    [self.toolbar setItems:buttons animated:NO];

    //add toolbar to the view
    [self.view addSubview:self.toolbar];


    //create UITableView
    //a better way setting to set the frame!?!?
    UITableView* listTable = [[UITableView alloc] initWithFrame:CGRectMake(0, 
                                                                           self.toolbar.bounds.size.height, 
                                                                           self.view.bounds.size.width, 
                                                                           self.view.bounds.size.height - self.toolbar.bounds.size.height) 
                                                          style:UITableViewStylePlain];
    [listTable setAutoresizesSubviews:TRUE];
    [listTable setAutoresizingMask:(UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight)];
    [listTable setDataSource:self];
    [listTable setDelegate:self];

    self.table = listTable;
    [self.view addSubview:listTable];
}

在rootViewController的loadView()中:

{
    [super loadView];

    controller = [[CustomViewController alloc] init];
    [self.customView addSubview:controller.view];
    [controller.view setAutoresizesSubviews:TRUE];
}

您可以在此处看到屏幕截图: https://plus.google.com/u/0/photos/112841433450419935389/albums/5693241484889252817/5693241483569881554

我是新手,除了确定尺寸正确之外,我是否走在正确的轨道上?

非常感谢。


编辑:

我正在尝试创建这样的视图

  • 的UIViewController
    • UINavigationBar的
    • UIView<<在左边,自定义UIViewController与UIToolbar和UITableView
    • UIView<<在右边,与上面相同

这个接近我正在尝试做的事情,除了我将有两个UITableView和没有分段按钮。 https://plus.google.com/u/0/photos/112841433450419935389/albums/5693241484889252817/5693260341279558818

2 个答案:

答案 0 :(得分:0)

从我可以扣除你的代码中你想要一个UITableView填充所有屏幕,除了屏幕上方的一个栏。 (通常UIToolBar位于屏幕的底部)

如果您使用UITableViewController并将其作为UINavigationController的rootViewController放置,您将获得许多不错的行为并且可以免费调整大小。

UINavigationController屏幕顶部的栏中有navigationBar,如果您愿意,可以在底部使用此toolBar

- (void)setToolbarHidden:(BOOL)hidden animated:(BOOL)animated

View Controller Programming Guide for iOS是一个值得研究的好地方。

答案 1 :(得分:0)

你做出了一些与UIViewControllers预期使用方式相反的假设,我认为不匹配是你困惑的根源。

UIViewControllers通常不会管理自己的根视图的大小。他们的观点通过它的容器调整大小。这意味着窗口或容器视图控制器(如UINavigationController(或使用iOS 5 API的自定义容器视图控制器))管理控制器视图的框架。

尝试调整控制器的帧-loadView不太可能有效,因为当视图稍后添加到窗口或父控制器的视图时,可能会重置视图的帧。类似地,控制器在加载视图后不应调整自己视图的帧,因为这可能与其父视图的-layoutSubviews行为竞争。

相反,我认为您需要一个视图控制器,其视图包含您要显示的UITableView和UINavigation栏。正如@VinceBurn所说,听起来你想要UINavigationController已经提供的行为。