为什么 UIPickerView 显示带有白色边框
Why UIPickerView shows with a white border
我添加了一个选择器视图以及数据源和委托,如下所示:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return _datas.count;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return _datas[component].count;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
CGFloat width = SCREEN_W / _datas.count;
return width;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
return kActionPickerRowHeight;
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(0, 0, SCREEN_W / _datas.count, kActionPickerRowHeight);
label.textAlignment = NSTextAlignmentCenter;
label.text = [NSString stringWithFormat:@"%@",_datas[component][row]];
label.font = [UIFont systemFontOfSize:12.f];
label.layer.borderWidth = 1.f;
return label;
}
但是选择器显示如下:
右边有一个150px左右的白边
我显示行的边框和选择器的边框以进行调试
将方法更新为
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
CGFloat width = pickerView.frame.width / _datas.count;
return width;
}
我找到了导致问题的原因:我没有将选择器视图的框架设置为及时更正值。因为我在-(void)layoutSubviews中写了frame-setting的代码,而且是在dataSource的方法调用之后调用的,所以无法正确显示。于是,我加上[self layoutIfNeed]初始化后手动调用layoutSubviews,问题解决
我添加了一个选择器视图以及数据源和委托,如下所示:
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView {
return _datas.count;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
return _datas[component].count;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
CGFloat width = SCREEN_W / _datas.count;
return width;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component {
return kActionPickerRowHeight;
}
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
UILabel *label = [[UILabel alloc] init];
label.frame = CGRectMake(0, 0, SCREEN_W / _datas.count, kActionPickerRowHeight);
label.textAlignment = NSTextAlignmentCenter;
label.text = [NSString stringWithFormat:@"%@",_datas[component][row]];
label.font = [UIFont systemFontOfSize:12.f];
label.layer.borderWidth = 1.f;
return label;
}
但是选择器显示如下:
右边有一个150px左右的白边
我显示行的边框和选择器的边框以进行调试
将方法更新为
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component {
CGFloat width = pickerView.frame.width / _datas.count;
return width;
}
我找到了导致问题的原因:我没有将选择器视图的框架设置为及时更正值。因为我在-(void)layoutSubviews中写了frame-setting的代码,而且是在dataSource的方法调用之后调用的,所以无法正确显示。于是,我加上[self layoutIfNeed]初始化后手动调用layoutSubviews,问题解决