0

我有一个 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];
    }
4

1 回答 1

1

建议一

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

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

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

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

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

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

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

建议二

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

建议 3

这段代码真的很奇怪:

    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 上,使用约束而不是设置框架。

于 2013-05-01T17:19:00.107 回答