我有一个UIDatepicker,我添加了边框图像,以便它位于UIDatepicker边框的顶部。在模拟器中,边框图像正好位于UIDatepicker边框之上,但是当我在iphone / ipod设备上运行项目时,边框图像往往位置不正确。为什么会发生这种情况?
当我点击settingsButton ..settingsButtonChanged方法被调用并且在settingsView中添加了datepicker。
谢谢
更新:
-(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];
}
答案 0 :(得分: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上,请使用约束而不是设置框架。