我将UIDatepicker添加到UIViewController,这是UINavigationController的根视图,我使用此代码将Datepicker定位在屏幕的底部。
UIDatePicker *picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.frame.size.height - 216, 320, 216)];
[self.view addSubview:picker];
这通常应该将选取器准确地放在屏幕的底部,但它是44p错位的。导航栏正好是44p高,所以我认为这是问题所在,但我不知道为什么框架高度包含导航栏的高度,当它不像子视图时那样。
我知道一个简单的方法是减去44,但我正在寻找一个没有任何固定数字的解决方案。有没有办法实现它,有人可以解释一下为什么视图包含导航栏的高度?
答案 0 :(得分:1)
将导航栏的半透明属性设置为是以解决您的问题..
例如:
self.navigationControllerInstance.navigationBar.translucent = YES;
答案 1 :(得分:0)
嗯,我认为既然你的UIViewController是UINavigationController的根视图,它隐含地将navigationBar包含在它的边界上。
要以编程方式获取其框架,您可以使用:
CGRect navframe = [[self.navigationController navigationBar] frame];
答案 2 :(得分:0)
UIDatePicker *picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, self.view.bounds.size.height - 216, 320, 216)];
[self.view addSubview:picker];
试试这个!
答案 3 :(得分: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实现中发生变化,因此最好在运行时检查大小。
答案 4 :(得分:0)
self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
我想这会解决你的问题!