我尝试以编程方式在我的视图中添加UITableView
,但是如下设置其参数不起作用(最后一个单元格被裁剪)。
table = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 480) style:UITableViewStylePlain];
我试图将高度替换为460,这非常有效。但我想知道这个栏的确切大小:
感谢您的帮助。
答案 0 :(得分:6)
您不应该在代码中的任何位置硬编码高度的确切值。
只要您使用默认的UI组件(UINavigationController
/ UITableView
/ UICollectionView
/等),您通常就不必担心状态栏的高度。这些ViewControllers应该在任何设备和任何方向上正确布局。
如果您确实有自定义布局需求,则应参考safeAreaLayoutGuide
上的UIView
,而不是硬编码高度:
https://developer.apple.com/documentation/uikit/uiview/2891102-safearealayoutguide?language=objc
但是要完成这个答案 - 状态栏的大小在不同的设备和不同的方向上是不同的:
答案 1 :(得分:1)
您的父视图控制器会将其视图调整为正确的大小。你可以
-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时要小心。