我是以编程方式将UIDatePicker控件添加到视图中。我希望DatePicker以标准方式显示停靠在屏幕底部......
我正在为DatePicker设置框架,需要了解3.5英寸iPhone和4英寸iPhone的不同屏幕尺寸。
以下代码产生了预期的结果,但我有几个问题......
// In ViewDidLoad
CGRect defaultFrame = CGRectMake(0,0,0,0);
_datePicker = [[UIDatePicker alloc] initWithFrame:defaultFrame];
CGRect bounds = [self.view bounds];
int datePickerHeight = _datePicker.bounds.size.height;
int navBarHeight = 44;
CGRect datePickerFrame = CGRectMake(0, bounds.size.height - (datePickerHeight + navBarHeight), 0, 0);
[_datePicker setFrame:datePickerFrame];
// In method responding to user tap
[self.view addSubview:_datePicker];
Q1。有没有更优雅的方式来做到这一点?除了以外的东西,用框架创建DatePicker,检查它的高度,然后设置它的框架......
Q2。视图是一个UITableView,位于UINavigationController中。当我获得self.view的边界时,大小包括整个视图,包括导航栏的44。然而,当我添加带有addSubview的DatePicker时,如果我没有包含navBar的偏移量,那么它会在44以下的底部...
为什么当[self.view bounds]返回完整边界时,addSubview在较小的范围内工作?
干杯, 加文
答案 0 :(得分:1)
问题是导航栏在视图加载初始化后向下推动所有视图。 自动调整掩码可能有所帮助。
答案 1 :(得分:1)
在进一步研究之后,我意识到我原来的问题是有缺陷的。目前尚不清楚我在哪里添加UIDatePicker作为子视图。我已经更新了这个问题。
我现在有两个答案:
1)在ViewDidLoad中定位并添加UIDatePicker。使用“自动调整大小”来处理视图大小更改。然后在用户点击控件时使其可见:
- (void)viewDidLoad
{
[super viewDidLoad];
_tableView = (UITableView*)self.view;
_tableView.backgroundColor = [UIColor colorWithRed:0.941 green:0.941 blue:0.913 alpha:1.000];
_tableView.backgroundView = nil;
_datePicker = [[UIDatePicker alloc] init];
CGRect bounds = [self.view bounds];
int datePickerHeight = _datePicker.frame.size.height;
_datePicker.frame = CGRectMake(0, bounds.size.height - (datePickerHeight), _datePicker.frame.size.width, _datePicker.frame.size.height);
_datePicker.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
_datePicker.isHidden = YES;
[self.view addSubview:_datePicker];
[_datePicker addTarget:self action:@selector(datePickerChanged:) forControlEvents:UIControlEventValueChanged];
}
2)只需根据需要设置UIDatePicker的帧,而不是在ViewDidLoad中设置:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
switch (indexPath.row) {
case RowDate:
{
CGRect bounds = [self.view bounds];
int datePickerHeight = _datePicker.frame.size.height;
_datePicker.frame = CGRectMake(0, bounds.size.height - (datePickerHeight), _datePicker.frame.size.width, _datePicker.frame.size.height);
[self.view addSubview:_datePicker];
break;
}
default:
break;
}
}
谢谢, 加文
答案 2 :(得分:0)
对于UIDatePicker
,您无需指定其大小。因为大多数时候你会希望它像屏幕一样宽,并且它的高度是固定的。但是你还需要把它放在正确的位置。也就是说,你需要为它计算正确的位置,设置它的框架。
因为大多数时候您不希望UIDatePicker
与navBar
重叠。因此,Apple会让addSubview
工作,好像边界“更小”。