如何去掉UIPickerView及UIDatePickerVie
2016-04-20 本文已影响7533人
liang1991
一、分割线问题
在系统默认情况下UIPickerView和UIDatePickerView选中项上下会各有一条分割线,如下图所示;

通过Reveal查看视图层级结构发现分割线为两个高为0.5的UIView,那么通过遍历subViews拿到并隐藏这两个view及可去掉分割线。下面分别介绍一下UIDatePickerView和UIPickerView的去除方法:
1、UIDatePickerView
为了方便复用可以创建一个UIDatePickerView的分类,代码如下:
#import "UIDatePicker+myPicker.h"
@implementation UIDatePicker (myPicker)
- (void)clearSpearatorLine
{
for (UIView *subView1 in self.subviews)
{
if ([subView1 isKindOfClass:[UIPickerView class]])//取出UIPickerView
{
for(UIView *subView2 in subView1.subviews)
{
if (subView2.frame.size.height < 1)//取出分割线view
{
subView2.hidden = YES;//隐藏分割线
}
}
}
}
}
@end
2、UIPickerView
和UIDatePickerVIew不同的是UIPickerView的代理方法加载之前它的subViews为空,所以一开始的时候我们无法取到分割线。
经测试可以在下面的代理方法中获取到
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
PickerCell *cell = [PickerCell cellWithRow:row];
[pickerView clearSpearatorLine];//UIPickerView分类方法
return cell;
}
下面两种代理使用方法同上

[pickerView clearSpearatorLine]是一个UIPickerView的分类方法(
#import "UIPickerView+malPicker.h"
@implementation UIPickerView (malPicker)
- (void)clearSpearatorLine
{
[self.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
if (obj.frame.size.height < 1)
{
[obj setBackgroundColor:[UIColor clearColor]];
}
}];
}
@end
去除分割线后效果如下图:

demo地址