0

尽管我认为我的定位正确,但我的 UIDatePicker 的一部分从屏幕底部延伸出来。有人可以告诉我我做错了什么吗?我已经经历了以下几行,但无法弄清楚我哪里出错了。我试图避免为我的 UIDatePicker 框架明确指定坐标。我在这里包含了我的视图控制器中的相关代码:

// Create the time picker
self.timePicker = [[UIDatePicker alloc] init];
[self.timePicker addTarget:self action:@selector(datePickerDateChanged:) forControlEvents:UIControlEventValueChanged];
self.timePicker.datePickerMode = UIDatePickerModeTime;

// Set the time picker frame
CGRect screenRect = [self.view frame];
CGSize pickerSize = [self.timePicker sizeThatFits:CGSizeZero];
CGRect pickerRect = CGRectMake(screenRect.origin.x,
                               screenRect.origin.y + screenRect.size.height - pickerSize.height,
                               pickerSize.width,
                               pickerSize.height);
NSLog(@"Picker frame: %f", screenRect.size.height);
NSLog(@"Picker frame: %f", screenRect.origin.y + screenRect.size.height - pickerSize.height);
[self.timePicker setFrame:pickerRect];

// Add the picker to the view
[self.view addSubview:self.timePicker];
4

1 回答 1

3

有几个问题。

由于您希望选择器视图相对于self.view您想要screenRect基于的放置self.view.bounds,而不是self.view.frame.

另外,永远不要打电话sizeThatFits:sizeToFit改为打电话。这在文档中针对这两种方法之一进行了说明。但这不是必需的。选择器视图将自动具有正确的大小。

您很可能希望选择器视图填充视图的宽度(至少在 iPhone/iPod touch 上)。所以你pickerRect应该是:

CGSize pickerSize = self.timePicker.bounds.size;
CGRect pickerRect = CGRectMake(0,
                               screenRect.size.height - pickerSize.height,
                               screenRect.size.width,
                               pickerSize.height);

最后一步是autoresizing为选取器设置掩码。由于您希望选择器固定在视图的底部,您应该使用灵活的上边距设置它。既然你想要它,视图的宽度将它设置为灵活的宽度:

self.timePicker.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth;
于 2013-06-19T02:45:26.870 回答