0

我正在向 UIViewController 添加一个 UIDatepicker,它是 UINavigationController 的根视图,我使用此代码将 Datepicker 定位在屏幕底部。

UIDatePicker *picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 216, 320, 216)];
[self.view addSubview:picker];

这通常应该将选择器准确地放置在屏幕底部,但它是 44p 错位。导航栏的高度正好是 44p,所以我认为这是问题所在,但我不知道为什么框架高度包括导航栏的高度,当它不像子视图时。

我知道一个简单的方法是减去 44,但我正在寻找一个没有任何固定数字的解决方案。有没有办法实现它,有人可以解释一下为什么视图包含导航栏的高度吗?

4

5 回答 5

1

将导航栏的半透明属性设置为YES以解决您的问题..

前任:

self.navigationControllerInstance.navigationBar.translucent = YES;
于 2013-04-18T11:39:21.797 回答
0

好吧,我认为,由于您的 UIViewController 是 UINavigationController 的根视图,因此它隐式地将导航栏包含在其边界上。

要以编程方式获取其框架,您可以使用:

CGRect navframe = [[self.navigationController navigationBar] frame];

于 2013-04-18T11:38:23.967 回答
0
UIDatePicker *picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 216, 320, 216)];
[self.view addSubview:picker];

尝试这个!

于 2013-04-18T11:41:53.687 回答
0

最好不要对任何维度进行硬编码。试试这个代码:

UIDatePicker *picker = [[UIDatePicker alloc] init];
CGRect pickerFrame = CGRectMake(0, CGRectGetHeight(self.view.bounds) - CGRectGetHeight(picker.bounds), CGRectGetWidth(picker.bounds), CGRectGetHeight(picker.bounds));
[picker setFrame:pickerFrame];
[self.view addSubview:picker];

它有效并且不假设日期选择器的高度始终为 216。这可能会在未来的 iOS 实现中发生变化,因此最好在运行时检查大小。

于 2013-04-18T11:47:29.023 回答
0
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;

我想这会解决你的问题!

于 2013-04-18T12:14:29.760 回答