使用 autoresizingMask 的 UITableView 大小错误
我有一个 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 的大小。我做错了什么?
先感谢您!
I have a UITableView which is not being resized properly using autoresizeMask (in iPhone 3.0).
The UITableView is inside a UIViewController inside a UINavigationController inside a UITabBarController, all of which are being created programatically. The status bar is visible.
The code of the UIViewController is basically:
- (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];
}
When created like this, the UITableView is slightly bigger than the available space. If I'm not mistaken, it's exactly 44 pixels bigger, the size of the navigation bar.
However, if I uncomment the commented line and comment the next line the size of the UITableView is exactly right. I would prefer to use autoresizingMask instead of manually calculating the size of the UITableView. What am I doing wrong?
Thank you in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
问题似乎是我没有在 loadView 中设置根视图的框架。如果您定义这样的框架,然后定义与该框架相关的子视图的框架,则自动调整大小蒙版将根据框架调整根视图大小的方式正确调整子视图的大小。
例如:
感谢 Colin Gislason 为我指明了正确的方向。
The problem seems to be that I wasn't setting the frame of the root view in loadView. If you define such frame, and then define the frame of the subviews in relation to that frame, then the autoresize masks will correctly resize the subviews according to how the root view was resized by the framework.
For example:
Thanks to Colin Gislason who pointed me in the right direction.
自动调整大小蒙版不会帮助您调整表视图的初始大小。表格视图是使用您提供的框架创建的。自动调整大小掩码定义了当父框架发生更改时调整此框架相对于父视图的大小的规则。
因此,如果我定义一个 320x100 的表,它将保持该大小,除非我显式更改它或父视图的框架发生更改。
根据其他视图,您可以根据父级或父级框架本身持有的其他视图进行计算。
The autoresizing mask will not help you with the initial size of the table view. The table view is created with the frame that you give it. The autoresizing mask defines the rules for resizing this frame relative to the parent view when the parent's frame changes.
So if I define a table that is 320x100 it will stay that size unless I change it explicitly or the parent view's frame changes.
Depending on the other views, you could do the calculation based on the other views held by the parent or by the parent's frame itself.
创建 UIViewController 子类来代替 UITableViewController 子类。
插入 UITableView 实例。
在 NIB 中,只需将 UIView 拖放
到现有 UITableVIew 对象的顶部即可。
通过 nib 或 viewDidLoad 方法设置 uitableview 的大小。
通过 nib 设置引用、数据源和委托。
现在它只需转移 UIViewController 类,并且可以根据需要更改 tableview 大小。
Create UIViewController subclass instand of UITableViewController Subclass.
insert UITableView instance.
in NIB simply drag and drop UIView
on top of that wier place the existing UITableVIew object.
set the size of the uitableview via nib or viewDidLoad method.
set the reference , dataSource and delegate via nib.
now its simply transfer the UIViewController class and the can change tableview size as you wish.