在处理了这个issue这么多小时而没有任何运气之后,我正在通过在我的UIViewController
的loadView中以编程方式创建视图来尝试不同的方法。我的UIToolbar
中有UITableView
和UIViewController
,但在将视图添加为另一个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
我是新手,除了确定尺寸正确之外,我是否走在正确的轨道上?
非常感谢。
编辑:
我正在尝试创建这样的视图
这个接近我正在尝试做的事情,除了我将有两个UITableView和没有分段按钮。 https://plus.google.com/u/0/photos/112841433450419935389/albums/5693241484889252817/5693260341279558818
答案 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已经提供的行为。