2013-03-11 193 views
1

我试图以编程方式将UITableView添加到我的视图中,但如下设置其参数不起作用(最后一个单元格被裁剪)。什么是iPhone屏幕顶部状态栏的确切大小?

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

我试着用460代替高度,效果很好。但是,我想知道这个酒吧的确切大小:

enter image description here

感谢您的帮助。

+0

不硬编码屏幕功能的大小!你将在稍后被拧紧。 'UIViewController'应该适合你的视图大小 - 确保你正确地设置了自动调整大小或者弹出&struts。 – nielsbot 2013-03-11 23:03:54

+0

即问题在于别处。 – nielsbot 2013-03-11 23:04:21

+0

也称为“状态栏” – nielsbot 2013-03-11 23:04:56

回答

6

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

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

如果你有自定义布局的需要,你应参考safeAreaLayoutGuideUIView,而不是硬编码的高度: https://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide?language=objc


但是,为了使这个答案完成 - 在状态栏的大小

  • 大多数设备到iPhone X有肖像用20pt高度:在不同的设备和不同的方向不同风景。
    (20像素,40像素,60像素的@ 1X,2X @,@ 3倍)
  • iPhone X纵向它是44pt(所以44px,88px,132px相应)。
    在风景中,高度虽然不同。
+1

实际上,在非视网膜上是20px或在视网膜上是40px ......无论哪种方式,它是20点,但+1,我同意“你不应该在你的代码中需要这个值。” – 2013-03-11 23:03:40

+0

更新为点。 – calimarkus 2013-03-11 23:04:50

+0

我刚刚通过创建一个新的单一视图应用程序尝试了一下,然后在我的ViewController中添加了一个UITableView,它使用'[self.view addSubview:table];'添加,这可能是因为它。这种做法有什么问题吗? – Rob 2013-03-11 23:20:01

1

您的父视图控制器将调整它的视图大小。您可以

  • 使您的视图控制器加载的UIView的子类,覆盖-layoutSubviews
  • 用适当的起始大小([[ MyViewClass alloc ] initWithFrame:superview.bounds])和适当的自动尺寸面具插入您的子视图。在使用自动调整struts &弹簧时,您必须为视图提供合适的大小。

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

+0

好吧,我明白,非常感谢。 – Rob 2013-03-12 07:56:21

1

这个答案是抢在评论原来的问题的问题:

所以,如果我不要硬编码我的屏幕大小,我怎么能自动设置它以适应我的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]; 
} 

这是假设您想要的表视图,以填补视图控制器的看法。根据需要调整。

这将确保表视图的大小随着视图控制器视图大小的改变而改变。这包括旋转,通话状态栏等。

+0

非常感谢代码和解释,非常清楚:) – Rob 2013-03-12 07:52:44

1

您不应该使用设置的像素尺寸来在屏幕上显示尺寸。使用你的观点的框架。即

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

无论如何。这是20分。 20px非视网膜。 40px视网膜。

0

更新iPhone X

以前,所有的iPhone设备有20pt的状态栏的高度。但在iPhone X上,它是44pt。所以在实现你的UI时要小心。