我正在尝试为UIPickerView提供自定义视图,以便每行的整个背景是两种颜色中的一种(没有一种是白色)。
我已经能够使用我想要的颜色提供这些自定义视图,但是我不能让视图填充整行的“空间”。
下面的测试代码试图达到将UIPicker的背景颜色更改为绿色的效果 - 但我提供的视图无法正确对齐。它总是在左边几个像素,有时实际上覆盖了组件的左边缘,具体取决于它的宽度。
这样做的结果是我总是在右侧看到白色边缘。
更改CGRect的原点不会更改其在行中的位置。
更改CGRect的宽度会改变宽度,但它仍然始终向左对齐几个像素。即没有居中。
任何人都可以告诉我,我在这里做错了什么?
我只是将一个标准的UIPicker放到视图上。
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
return 44;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
return 200;
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UIView *rowView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 44)] autorelease];
rowView.backgroundColor = [UIColor greenColor];
return rowView;
}
答案 0 :(得分:1)
好的,我已经设法至少“集中”视图。
我必须在viewForRow返回的视图中添加一个子视图,并为origin.x值尝试一些值,如下所示:
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UIView *rowView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 44)] autorelease];
UIView *subView = [[[UIView alloc] initWithFrame:CGRectMake(6, 0, 194, 44)] autorelease];
subView.backgroundColor = [UIColor greenColor];
[rowView addSubview:subView];
return rowView;
}
由于某种原因,虽然我无法将视图延伸到行的边缘,因此显示在视图两侧的白色边缘仍然存在。我可以忍受这个。
希望这有助于其他人。
答案 1 :(得分:0)
- (UIView *)pickerView:(UIPickerView *)apickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UIView *rowView = nil;
if(view==nil) {
rowView = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 44)] autorelease];
rowView.backgroundColor = [UIColor greenColor];
return rowView;
}
return view;
}
“技巧”是返回reusingView(如果可用)。 在此之后,您可以根据需要配置视图。
“320”值只是为了测试你应该改为放置一些计算值,例如pickerView.frame.size.width,这样代码就会更清晰。