子视图定位不正确

时间:2013-04-18 11:32:38

标签: ios objective-c uiview subview uidatepicker

我将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,但我正在寻找一个没有任何固定数字的解决方案。有没有办法实现它,有人可以解释一下为什么视图包含导航栏的高度?

5 个答案:

答案 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;

我想这会解决你的问题!