【问题标题】:Loading a UIDatePicker in Landscape on a UINavigationController在 UINavigationController 上以横向方式加载 UIDatePicker
【发布时间】:2009-07-06 17:17:42
【问题描述】:

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

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

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

【问题讨论】:

    标签: uinavigationcontroller uidatepicker


    【解决方案1】:

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

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

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

    【讨论】:

    • 出色而简单的解决方案。这真是令人抓狂,谢谢!
    • +1 很棒的解决方案。我几乎整天都在尝试解决这个问题,而这两条线在一秒钟内就解决了。摇滚人!非常感谢..
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 显然,如果从笔尖加载视图控制器时设备已经处于横向,则它不会正确呈现。因此,您重新创建控件的修复是有意义的,但我找到了更好的修复,请参阅我的答案。
      【解决方案4】:

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

      设置self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin

      【讨论】:

        【解决方案5】:

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

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

        所以基本上,我更改了方向,创建了 datePicker,然后立即将方向更改回原来的样子。我在别处设置了选择器宽度(屏幕宽度)和高度(216)。

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-04-11
            • 1970-01-01
            • 2011-09-16
            • 2013-08-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多