[ios]UIImage 不正确排列在 UIDatepicker 上 (在设备只)

发布时间: 2017/3/21 22:38:18
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有我在这里已经添加边框图像,于是它坐拥 UIDatepicker 边境 UIDatepicker。在模拟器中边框图像是在正好位于 UIDatepicker 的边界,但当我在 iphone 上运行项目 / ipod 设备.the 边框图像往往要在自己的位置。为什么是这种情况发生?

当我点击 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];
    }

解决方法 1:

建议 1

嗯,首先,此代码没有任何意义根本︰

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

考虑该怎么做。假设您有一个名为的属性或实例变量 userTimePicker (你必须有什么这样吧?)。现在,它是指向来自nib/storyboard,实际日期选取器插座,或者它不是。那么︰

  • 如果是,现在它不是 !只是已经用不同的日期选取器覆盖对接口中的实际日期选取器的引用。

  • 如果不是,只是设置 userTimePicker 为日期选取器,但该日期选取器不是在界面中 (你有没有向其接口添加的代码)。

所以,无论哪种方式,从现在开始, userTimePicker 是无用的; 它不指向任何东西在界面中。

所以你当然需要修复,做其他事情之前 !

建议 2

还有一个建议为为什么您在模拟器上的结果不同于您设备上的结果︰ 它可能是因为你已经在模拟器上反复测试。这可以导致旧代码/资源存在于您的应用程序的模拟器版本。要解决这个问题,你的缓存清理和恢复模拟器对其默认值,如我在这里描述︰ http://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,使用约束,而不是设置帧。

赞助商