iOS进阶UI效果iOS学习

如何去掉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的分类方法(由于该方法会被调用多次所以在分类里添加了一个布尔类型的属性作标记使隐藏分割线的代码只执行一次iOS 10后滚动pickerView会刷新subView只设置一次没有效果,所以不再加判断每次都设置一遍..)
#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地址
上一篇 下一篇

猜你喜欢

热点阅读