在UINavigationController上的Landscape中加载UIDatePicker

时间:2009-07-06 17:17:42

标签: uinavigationcontroller uidatepicker

我有一个支持自动旋转的自定义UINavigationController。我的一个视图上还有一个UIDatePicker,我将其扔到Navigation控制器的堆栈上。如果我以纵向方式启动日期选择器视图然后旋转它,则自动旋转有效。如果我尝试在横向开始加载日期选择器视图,则视图全部搞砸了。看起来如果它不支持旋转,框架只有大约一半的选择器可见并偏离中心。

我已经尝试制作我自己的日期选择器,支持自动旋转以防出现问题,我尝试创建两个不同的视图并将它们交换出去,我尝试在ViewWillAppear上更改视图框架大小方法。到目前为止,他们似乎都没有为我工作。

任何人都有关于如何让日期选择器在导航控制器上正确显示的任何建议吗?我可能忽略了一些简单的事情,答案就在我面前,但我找不到它。

6 个答案:

答案 0 :(得分:13)

我遇到了同样的问题。在已经处于横向方向时加载视图时,UIPicker无法正确呈现。我花了几个小时试图找到解决方法,直到找到this page from Llamagraphics的修复程序。您可以在具有选择器的视图控制器的viewDidLoad中添加此代码:

for (UIView* subview in myPicker.subviews) {
    subview.frame = myPicker.bounds;
}

访问webpage了解详情。谢谢Stuart!

答案 1 :(得分:1)

以下代码适用于纵向和横向模式。为此,您需要设置如下所示的tableview框架原点: -

_dateTableViewCell=[self.tableView dequeueReusableCellWithIdentifier:@"DatePickerCell"];
if (self.dateTableViewCell==nil)
{
    CGRect rect;
    self.dateTableViewCell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"DatePickerCell"];
    UIDatePicker *datePicker=[[UIDatePicker alloc]initWithFrame:frame];
    datePicker.datePickerMode=UIDatePickerModeDateAndTime;
    datePicker.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    CGRect cellRect = self.dateTableViewCell.frame;
    cellRect.size.height = 216;
    self.dateTableViewCell.frame = cellRect;
    CGRect startRect = self.dateTableViewCell.frame;
    startRect.origin.x = 0.0;
    datePicker.frame = startRect;
    [self.dateTableViewCell.contentView addSubview:datePicker];
}

答案 2 :(得分:0)

我修好了。我设法检查方向是什么,然后删除日期选择器,在代码中,我重新创建了一个日期选择器并添加了它。这很有效,但并不美观,但确实有效。

答案 3 :(得分:0)

添加日期选择器以自动旋转视图(控制器视图,而不是直接在窗口中)。

设置self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin

答案 4 :(得分:0)

这对我有用。当我创建DatePicker时,我认为它处于纵向模式:

[[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationPortrait  animated: NO];
datePicker = [[UIDatePicker alloc] initWithFrame: CGRectZero];
[[UIApplication sharedApplication] setStatusBarOrientation: curOrientation animated: NO];

所以基本上,我改变方向,创建datePicker,然后立即将方向改回原来的状态。我在其他地方设置了拾取器宽度(屏幕宽度)和高度(216)。

我从另一页获得了这个线索。

答案 5 :(得分:0)

我在iPad上水平调整显示日期选择器(在计时器模式下)时遇到了同样的问题。我无法得到这个bug的任何已知解决方案,所以我修复了一个丑陋的黑客,其中涉及在视图中放置两个日期选择器 - 一个在后台调整大小,另一个在标准大小(320px)在前台...我知道,听起来很恶心,但它显示得恰到好处,这才重要。无论如何,这是Apple的错;)