9

我有一个支持自动旋转的自定义 UINavigationController。我的一个视图上也有一个 UIDatePicker,我将其放入导航控制器的堆栈中。如果我以纵向启动日期选择器视图然后旋转它,则自动旋转工作。如果我尝试以横向加载日期选择器视图,则视图会一团糟。如果它不支持旋转,并且框架只有大约一半的选择器可见且偏离中心,它看起来会如此。

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

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

4

6 回答 6

13

我遇到了同样的问题。当您在横向加载视图时,UIPicker 不会正确呈现。我花了几个小时试图找到一种解决方法,直到我从 Llamagraphics 的这个页面找到了一个修复程序。您将此代码添加到具有选择器的视图控制器的 viewDidLoad 中:

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

访问网页了解更多详情。谢谢斯图尔特!

于 2010-03-12T19:54:46.067 回答
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];
}
于 2015-05-26T04:40:20.743 回答
0

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

self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin

于 2009-07-09T12:45:30.423 回答
0

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

于 2009-07-08T00:21:37.003 回答
0

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

于 2010-05-10T15:18:19.597 回答
0

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

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

所以基本上,我改变了方向,创建了 datePicker,然后马上把方向改回原来的样子。我在其他地方设置了选择器宽度(屏幕宽度)和高度(216)。

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

于 2010-04-04T04:24:20.803 回答