在UINavigationController的横向加载UIDatePicker

在UINavigationController的横向加载UIDatePicker,uinavigationcontroller,uidatepicker,Uinavigationcontroller,Uidatepicker,我有一个支持自动旋转的自定义UINavigationController。在我的一个视图上还有一个UIDatePicker,我将它扔到导航控制器的堆栈上。如果我在纵向中启动日期选择器视图,然后旋转它,则自动旋转会起作用。如果我开始尝试在横向中加载日期选择器视图,视图就会乱七八糟。如果它不支持旋转,并且框架只有大约一半的选择器可见且偏离中心,它看起来会这样 我曾尝试制作自己的日期选择器,支持自动旋转,以防出现问题。我曾尝试创建两个不同的视图并将其交换,我还尝试在ViewWillAspect方法上更

我有一个支持自动旋转的自定义UINavigationController。在我的一个视图上还有一个UIDatePicker,我将它扔到导航控制器的堆栈上。如果我在纵向中启动日期选择器视图,然后旋转它,则自动旋转会起作用。如果我开始尝试在横向中加载日期选择器视图,视图就会乱七八糟。如果它不支持旋转,并且框架只有大约一半的选择器可见且偏离中心,它看起来会这样

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


有人对如何让日期选择器在导航控制器上正确地显示在景观中有什么建议吗?我可能忽略了一些简单的事情,答案就在眼前,但我找不到它。

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

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


设置
self.autoresizingMask=uiviewsautoresizingflexiblewidth | uiviewsautoresizingflexibletpmargin

我遇到了同样的问题。加载视图时,如果已经处于横向方向,则UIPicker不会正确渲染。我花了几个小时试图找到一个解决方法,直到我从中找到了修复方法。在具有选择器的视图控制器的viewDidLoad中添加以下代码:

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

有关更多详细信息,请访问。谢谢你,斯图尔特

以下是对我有用的东西。当我创建日期选择器时,我会让它认为它处于纵向模式:

[[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationPortrait  animated: NO];
datePicker = [[UIDatePicker alloc] initWithFrame: CGRectZero];
[[UIApplication sharedApplication] setStatusBarOrientation: curOrientation animated: NO];
所以基本上,我改变了方向,创建了日期选择器,然后马上把方向改回原来的样子。我在别处设置了选择器宽度(屏幕宽度)和高度(216)


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

我在iPad上显示水平调整大小的日期选择器(计时器模式)时也遇到了同样的问题。我无法找到任何已知的解决方案来解决这个错误,所以我用一个丑陋的黑客程序修复了这个问题,它涉及到在视图中放置两个日期选择器-一个在后台调整大小,另一个在前台使用标准大小(320px)。。。我知道,听起来很恶心,但它显示得很好,这才是最重要的。不管怎样,这都是苹果的错;)

以下代码适用于纵向和横向模式。为此,您需要如下设置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];
}

从nib加载视图控制器时,如果设备已处于横向,则显然无法正确渲染。因此,您重新创建控件的修复是有意义的,但我找到了一个更好的修复方法,请参阅我的答案。这是一个出色而简单的解决方案。这真让人发疯,谢谢+一个很好的解决方案。我几乎一整天都在试图解决这个问题,这两条线在一秒钟内就解决了。摇摆人!谢谢。。