【问题标题】:UIImage not aligning properly on UIDatepicker ( In device only)UIImage 在 UIDatepicker 上未正确对齐(仅在设备中)
【发布时间】:2013-05-02 01:43:01
【问题描述】:

我有一个 UIDatepicker,我在其中添加了边框图像,使其位于 UIDatepicker 边框的顶部。在模拟器中,边框图像正好位于 UIDatepicker 边框的顶部,但是当我在 iphone/ipod 设备上运行项目时,边框图像往往不在位置。为什么会这样?

当我点击 settingsButton ..settingsButtonChanged 方法被调用并在 settingsView 中添加日期选择器。

谢谢

更新:

 -(void)viewDidLoad
    {
        userTimePicker = [[UIDatePicker alloc]init

    }


    -(IBAction)settingsButtonChanged:(UIButton *)sender
    {


        UIImageView *settingsImage = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"settingsViewImage.png"]];
        settingsImage.frame = CGRectMake(0.0, 0.0, 280.0, 370.0);

        CGFloat height = [UIScreen mainScreen].bounds.size.height;

        if(height==568.00)
        {
            settingsView.frame = CGRectMake(0.0, 50.0, 280.0, 370.0);

        }else
        {
            settingsView.frame = CGRectMake(20.0, 45.0, 280.0, 370.0);
        }

        settingsView.backgroundColor = [UIColor clearColor];
        [settingsView addSubview:settingsImage];


        UIImageView *userTimePickerBorder = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"datepickerBorder.png"]];
        userTimePickerBorder.frame = CGRectMake(0.0, 0.0, 150.0, 180.0);

        userTimePicker.frame = CGRectMake(65.0, 165.0, 150.0, 180.0);
        userTimePicker.datePickerMode = UIDatePickerModeTime;

        [settingsView addSubview:userTimePicker];
        [userTimePicker addSubview:userTimePickerBorder];

        [symptomView addSubview:settingsView];
    }

【问题讨论】:

  • 你能把它分成两个不同的问题吗?谢谢!
  • 模拟器与设备不同真的很奇怪。您还记得将模拟器设置为相同类型的设备吗?如果你这样做,那么问题会发生吗?我认为这可能是一个约束/自动调整大小的问题。 - 如果您发布放置边框图像的代码可能会有所帮助。或者屏幕截图。或两者! :)
  • @matt 你说过将模拟器设置为相同类型的设备你的意思是如果我有非视网膜显示 iphone 并使用非视网膜显示模拟器..我正在添加我添加的第二个问题的代码堆栈溢出

标签: iphone ios objective-c uiimage uidatepicker


【解决方案1】:

建议一

好吧,首先,这段代码毫无意义:

- (void)viewDidLoad {
    userTimePicker = [[UIDatePicker alloc]init];
}

考虑它的作用。假设您有一个名为userTimePicker 的属性或实例变量(您一定有类似的东西,对吧?)。现在,它要么是指向来自笔尖/故事板的实际日期选择器的出口,要么不是。那么:

  • 如果是,现在不是!您刚刚使用不同的日期选择器覆盖了界面中对实际日期选择器的引用。

  • 如果不是,您刚刚将 userTimePicker 设置为日期选择器,但该日期选择器不在界面中(您没有将其添加到界面的代码)。

所以,不管怎样,从现在开始,userTimePicker 是没用的;它不指向界面中的任何内容。

所以你肯定需要在做任何其他事情之前解决这个问题!

建议二

另外,对于您在模拟器上的结果与在设备上的结果不同的原因,我有一个建议:这可能是因为您一直在模拟器上反复测试。这可能会导致旧代码/资源出现在您的应用程序的模拟器版本中。要解决此问题,请清除缓存并将模拟器恢复为其默认值,正如我在此处描述的那样:https://stackoverflow.com/a/6247073/341994 我希望这至少会导致模拟器和设备的行为相同!然后你就可以继续真正的修复你的代码了。

建议三

这段代码真的很奇怪:

    CGFloat height = [UIScreen mainScreen].bounds.size.height;

    if(height==568.00)
    {
        settingsView.frame = CGRectMake(0.0, 50.0, 280.0, 370.0);

    }else
    {
        settingsView.frame = CGRectMake(20.0, 45.0, 280.0, 370.0);
    }

您不应该为任何事情咨询屏幕边界!所有这些都应该在某个视图控制器中进行。视图控制器的视图应该旋转和调整大小以适应设备方向或屏幕大小,因此视图控制器视图的边界会发生变化, 是您应该检查的内容。

您应该根据视图控制器视图的边界或它们要进入的父视图的边界来表达它们,而不是对这些帧值进行硬编码。这会给你一致的结果。更好的是,如果这是在 iOS 6 上,请使用约束而不是设置框架。

【讨论】:

  • UIDatepicker 的 userTimePicker 没有在 xib 文件中设置。如果我没有在 xib 文件中添加,我不应该分配 init
  • 是的,但是由于您没有同时将其添加到界面中,因此我陷入了循环。相反,每次调用 settingsButtonChanged: 时,您都将其添加到界面中!这真的是你想要的吗?
  • 是的,我一直在模拟器中测试应用程序而不是设备,你可能是对的,它可能缓存了旧代码
  • 我只在settingsButtonChanged: 方法时添加日期选择器..此方法将打开设置查看日期选择器所在的位置
  • 好吧,忽略我刚才所说的关于 alloc-init 的内容。但实际上,如果这是您需要此日期选择器的第一个地方,您可以将 alloc-init 与 settingsButtonChanged: 中的内容一起使用。
猜你喜欢
  • 2012-11-07
  • 1970-01-01
  • 2021-11-16
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多