iPhone屏幕顶部状态栏的确切大小是多少?

时间:2013-03-11 22:58:05

标签: iphone ios

我尝试以编程方式在我的视图中添加UITableView,但是如下设置其参数不起作用(最后一个单元格被裁剪)。

table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain];

我试图将高度替换为460,这非常有效。但我想知道这个栏的确切大小:

enter image description here

感谢您的帮助。

5 个答案:

答案 0 :(得分:6)

  

您不应该在代码中的任何位置硬编码高度的确切值。

只要您使用默认的UI组件(UINavigationController / UITableView / UICollectionView /等),您通常就不必担心状态栏的高度。这些ViewControllers应该在任何设备和任何方向上正确布局。

如果您确实有自定义布局需求,则应参考safeAreaLayoutGuide上的UIView,而不是硬编码高度: https://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide?language=objc


但是要完成这个答案 - 状态栏的大小在不同的设备和不同的方向上是不同的:

  • 大多数设备直至iPhone X 的纵向高度为20pt。景观。
    (20xx,40px,60px in @ 1x,@ 2x,@ 3x)
  • iPhone X 上以纵向显示它的44pt(因此44px,88px,132px相应)。
    在景观中,高度不同。

答案 1 :(得分:1)

您的父视图控制器会将其视图调整为正确的大小。你可以

  • 让您的视图控制器加载UIView的子类并覆盖-layoutSubviews
  • 使用正确的起始大小([[ MyViewClass alloc ] initWithFrame:superview.bounds])和正确的自动调整掩码插入子视图。使用autoresizing struts&时非常重要。弹簧,你给你的视图适当的大小开始。

BTW - 硬编码状态栏高度的另一个问题:它有时是双倍高度。 (当用户录制音频,拨打电话,使用互联网网络共享,使用导航等)时

答案 2 :(得分:1)

这个答案是对原始问题的评论中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];
}

这假设您希望表视图填充视图控制器的视图。根据需要进行调整。

这将确保在视图控制器的视图大小更改时表视图的大小发生更改。这包括轮换,通话状态栏等。

答案 3 :(得分:1)

您不应使用设置像素尺寸来确定屏幕大小。使用你查看的框架。即

table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) style:UITableViewStylePlain];

反正。这是20分。 20px非视网膜。 40px视网膜。

答案 4 :(得分:0)

iPhone X更新

以前,所有iPhone设备的状态栏高度均为20pt。但在iPhone X上,这是44pt。因此在实施UI时要小心。