如何以编程方式调整UI表视图控制器的UI表视图?

时间:2010-10-21 00:31:06

标签: user-interface iphone-sdk-3.0 uitableview

我将UITableViewController子类化并称之为FeaturedGamesViewController。好的,我还有一个导航控制器,我在其中添加了这个FeaturedGamesViewController作为根。您在App Delegate中所做的所有非常标准的事情。

另请注意,没有为FeaturedGamesViewController创建NIB文件。只需子类化UITableViewController并调用initWithStyle就可以设置表的样式并自动设置dataSource和委托和大小。 Data Source和Delegate显然设置为FeaturedGamesViewController。

- (id)init

{
    //调用超类的指定初始值设定项     [super initWithStyle:UITableViewStyleGrouped];

}

好的,您看到我已将表格大小设置为“Grouped”。在我的iPad上的横向视图中,它有大约20个像素的空间到顶部,左侧和右侧(抱歉无法发布屏幕截图,因为我是新来的,系统不会让我直到我累积了一定数量的点数)

我不想要那个!这是Landscape,所以我希望它填满导航栏和下面标签栏之间的所有空间。更糟糕的是,我伪造了一个带有自定义UITableViewCell的网格,但是左边和右边的空间使得如果你点击那个空间,整个行被选中,从而背叛了这是一个网格。

现在我想我应该在viewDidLoad中调整表视图的大小,但我不知道如何。由于潜在的内存泄漏(并且可能重置已经设置的dataSource和delegate以及autoresizeMask属性),我无法执行initWithFrame,因此必须有一个setter或其他东西将tableview的原点重置为导航栏下方并填满整个屏幕尺寸为1024X748。你如何动态重置表格视图的大小?

然后我非常沮丧,我决定通过Nib文件来实现,这样我就可以将方向设置为横向并设置模拟导航和标签栏,并使用表格视图填充剩余的空间。这有效!如果你很好奇如何在没有nib的UITableViewController子类之后用Nib创建表视图,请按以下步骤操作:

http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/TableView_iPhone/CreateConfigureTableView/CreateConfigureTableView.html#//apple_ref/doc/uid/TP40007451-CH6-SW10

转到“以编程方式创建表视图”之前的段落。

好的,当我这样做时,我的“网格”横向视图看起来就像我想要的那样填满了顶部导航栏和底部标签栏之间的整个空间。

我更多地摆弄这个,我发现在我的“非笔尖”版本(有问题的版本)中,我将表格样式设置为“分组”。当我把它改成“普通”时,它有效!但事情就是这样:在nib版本中,“分组”或“普通”给出了正确的布局,桌子占据了整个空间。那是什么给出了什么?

很抱歉这个问题很长,但我猜我的问题是:

1)如何以编程方式重置表视图的大小,而不会引入潜在的内存泄漏或影响已为您设置的其他属性(例如:dataSource,delegate,autoResizeMask - 这些是为您设置的,因为您已经为UITableViewController创建子类)?

2)你如何为一般观点做到这一点?

3)为什么“普通”样式会根据需要填充布局,而“分组”样式会给出奇怪的布局。请注意,这在Nib版本中不是问题。

感谢您的耐心等待!

1 个答案:

答案 0 :(得分:0)

回答(2),因此回答(1):

UIView的框架位于其超视图的局部坐标系中。使视图适合其超级视图的常用方法是

CGRect bounds = [[self superview] bounds];
[self setFrame:bounds];

您应该在 layoutSubviews 中执行此操作。