我试图以UITableView
编程方式将一个添加到我的视图中,但是将其参数设置如下不起作用(最后一个单元格被裁剪)。
table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain];
我尝试将高度替换为 460,效果很好。但我想知道这个栏的确切大小:
谢谢你的帮助。
您永远不应该在代码中的任何位置硬编码高度的确切值。
只要您使用默认的 UI 组件(///等UINavigationController
),您通常根本不需要担心状态栏的高度。这些 ViewController 应该在任何设备和任何方向上正确布局。UITableView
UICollectionView
如果您确实有自定义布局需求,您应该参考safeAreaLayoutGuide
on UIView
,而不是硬编码高度:
https ://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide?language=objc
但是为了使这个答案完整 - 状态栏的大小在不同的设备和不同的方向上是不同的:
您不应该使用设置像素尺寸来调整屏幕大小。使用您的视图框架。IE
table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];
反正。是20分。20px 非视网膜。40px 视网膜。
这个答案是对原始问题评论中 Rob 问题的回答:
因此,如果我不硬编码我的屏幕尺寸,如何自动设置它以适合我的 UIViewController?
尝试这个:
- (void)viewDidLoad {
[super viewDidLoad];
table = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
// all other table setup
table.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:table];
}
这假设您希望表格视图填充视图控制器的视图。根据需要进行调整。
这将确保表视图的大小随着视图控制器的视图大小的变化而变化。这包括轮换、通话状态栏等。
您的父视图控制器会将其视图调整为正确的大小。你可以
-layoutSubviews
[[ MyViewClass alloc ] initWithFrame:superview.bounds]
) 和正确的自动调整大小掩码插入您的子视图。在使用 autoresizing struts & springs 时,为您的视图提供适当的尺寸是很重要的。顺便说一句 - 硬编码状态栏高度的另一个问题:它有时是双倍高度。(当用户正在录制音频、拨打电话、使用网络共享、使用导航等时)
iPhone X 更新
以前所有 iPhone 设备的状态栏高度都是 20pt。但在 iPhone X 上,它是 44pt。所以在实现你的 UI 时要小心。