1

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

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

我尝试将高度替换为 460,效果很好。但我想知道这个栏的确切大小:

在此处输入图像描述

谢谢你的帮助。

4

5 回答 5

6

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

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

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


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

  • 直到 iPhone X的大多数设备在纵向和横向上都有 20pt 的高度。
    (@1x、@2x、@3x 中的 20 像素、40 像素、60 像素)
  • 在纵向的iPhone X上,它是 44pt(相应地是 44px、88px、132px)。
    在风景中,高度是不同的。
于 2013-03-11T23:02:36.107 回答
1

您不应该使用设置像素尺寸来调整屏幕大小。使用您的视图框架。IE

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

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

于 2013-03-12T08:49:18.023 回答
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];
}

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

这将确保表视图的大小随着视图控制器的视图大小的变化而变化。这包括轮换、通话状态栏等。

于 2013-03-12T01:46:07.197 回答
1

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

  • 让您的视图控制器加载 UIView 的子类并覆盖-layoutSubviews
  • 使用正确的起始大小 ( [[ MyViewClass alloc ] initWithFrame:superview.bounds]) 和正确的自动调整大小掩码插入您的子视图。在使用 autoresizing struts & springs 时,为您的视图提供适当的尺寸是很重要的。

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

于 2013-03-12T00:50:15.727 回答
0

iPhone X 更新

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

于 2017-09-14T14:52:42.017 回答