IOS7 UIPickerView如何隐藏select指示器

我怎么能隐藏选定的行上的这2行?

在这里输入图像说明

[[pickerview.subviews objectAtIndex:1] setHidden:TRUE]; [[pickerview.subviews objectAtIndex:2] setHidden:TRUE]; 

titleForRowviewForRow委托方法中使用pickerView

基于其他答案,我决定枚举子视图,看到这些行的高度为0.5所以现在我的解决scheme在Swift中看起来像这样:

 func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { pickerView.subviews.forEach({ $0.hidden = $0.frame.height < 1.0 }) return myRowCount } 

在Objective-C中

 - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { [pickerView.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) { subview.hidden = (CGRectGetHeight(subview.frame) < 1.0) }]; return myRowCount } 

显然不是特别有前途的证据,但可能比在给定索引处隐藏子视图更为重要。

编辑:更新来处理@Loris提供的情况

在iOS7中,根据文档( https://developer.apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UIPickerView.html )设置参数pickerview.showsSelectionIndicator不起作用。

然而,作为一个UIPickerView到底是一个UIView与子视图,我检查了哪些子视图。 我发现3,第一个包含UIPickerView的所有组件,另外两个是两行。

所以通过设置第二个和第三个(索引1和2)隐藏,两条线被删除。

 [[pickerview.subviews objectAtIndex:1] setHidden:TRUE]; [[pickerview.subviews objectAtIndex:2] setHidden:TRUE]; 

这不是一个很好的解决scheme,而且绝对不是兼容的,但是现在它完成了工作。 希望这可以帮助。

这在Swift中适用于iOS 9 Beta。

 datePicker.subviews[0].subviews[1].hidden = true datePicker.subviews[0].subviews[2].hidden = true 

Swift 3版本(工作):

 pickerView.subviews[1].isHidden = true pickerView.subviews[2].isHidden = true 

它在ios7之前工作。

 pickerView.showsSelectionIndicator = NO; 

有关ios7的更多信息,请参阅此文档

https://developer.apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UIPickerView.html

这很容易实现。 只需将你的PickerView放在一个ScrollView里面,并且使用picker delegate(pickerView:rowHeightForComponent :)方法把select器的行高改成比你的ScrollView大一点。 像那样,这些线将被隐藏。

我通过一个简单的技巧解决了这个问题:在视图中放置select器视图,并设置此视图的剪辑子视图属性= true。 现在,只需在select器视图中设置行的高度=容器视图的高度,那么该行将消失。

 func numberOfComponents(in pickerView: UIPickerView) -> Int { pickerView.subviews.forEach({ $0.isHidden = $0.frame.height < 1.0 }) return 1 } 

只需在你的viewdidload方法中写下这段代码

 [[PickerView.subviews objectAtIndex:1] setHidden:TRUE]; [[PickerView.subviews objectAtIndex:2] setHidden:TRUE]; 

在ios7中,我们不能隐藏UIPickerView中的单独行,我们可以从这个页面知道: https : //developer.apple.com/library/ios/documentation/UIKit/Reference/UIPickerView_Class/index.html#//apple_ref / OCC / instm / UIPickerView / showsSelectionIndicator

但是我们可以添加两个UIViews来覆盖它,两个UIViews的宽度是1.一些示例代码在这里:

 s_leftLine = [[UIView alloc] initWithFrame:CGRectMake(s_pickerView.frame.size.height/2, s_pickerView.frame.size.width/2 - kWidthOfPickerPage/2 + 1, 1, s_pickerView.frame.size.height)]; s_leftLine.backgroundColor = [UIColor whiteColor]; s_leftLine.layer.zPosition = s_pickerView.layer.zPosition + 1; // make sure the line is on the top [s_pickerView addSubview:s_leftLine]; 

好吧,这会好得多:]如果有人有更好的答案只是把它写下来共享:)

我select了一种不同的方法,以防止苹果决定改变一些事情

 for subview in setPickerView.subviews{ if subview.frame.origin.y != 0{ subview.isHidden = true } } 

由于(包含项目的子视图)的起源y位置是0,那么我可以安全地隐藏其他任何东西,而不会冒一个索引超出界限的错误

请享用

编辑:我忘了告诉你,我把它放在viewDidLayoutSubviews方法!

您也可以对UIPickerView进行扩展:

 extension UIPickerView { func hideSelectionIndicator() { for i in [1, 2] { self.subviews[i].isHidden = true } } } 

然后调用myPickerView.hideSelectionIndicator()为每个你想改变的PickerView。

此代码适用于iOS 10,使用swift 3

只要在你的视图控制器类中添加这个代码。

 override func viewDidLayoutSubviews() { timePickerView.subviews[1].isHidden = true timePickerView.subviews[2].isHidden = true }