IOS7 UIPickerView如何隐藏选择指标

时间:2013-12-16 13:35:08

标签: ios uiview ios7 uipickerview

如何隐藏所选行上的这两行?

enter image description here

16 个答案:

答案 0 :(得分:34)

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

titleForRow的{​​{1}}或viewForRow委托方法中使用此功能。

答案 1 :(得分:23)

基于其他答案,我决定枚举子视图并看到这些行的高度为0.5所以我的解决方案现在在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提供的案例

答案 2 :(得分:11)

在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];

这不是一个真正好的解决方案,并且绝对不能向前兼容,但是现在它完成了工作。希望这会有所帮助。

答案 3 :(得分:8)

这适用于iOS 9 Beta版的Swift。

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

答案 4 :(得分:6)

Swift 3版本(工作):

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

答案 5 :(得分:5)

它在ios7之前工作。

pickerView.showsSelectionIndicator = NO;

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

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

答案 6 :(得分:5)

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

答案 7 :(得分:4)

这很容易实现。只需将PickerView放在具有所需行大小的ScrollView中,然后使用选择器委托(pickerView:rowHeightForComponent :)方法将选取器的行高更改为比ScrollView稍大一些。就像这样,线条将被隐藏。

答案 8 :(得分:4)

快捷键5

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) ->  String? {
        pickerView.subviews[1].isHidden = true
        pickerView.subviews[2].isHidden = true
        return pickerData[row]
}

enter image description here

答案 9 :(得分:3)

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

答案 10 :(得分:1)

Swift 4.2

将这两行代码粘贴到pickerView的titleForRow或viewForRow委托方法中。

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

你应该很好。

答案 11 :(得分:0)

只需在viewdidload方法中编写此代码

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

答案 12 :(得分:0)

在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];

好的,这会好得多:] 如果有人有更好的答案,请将其写下来分享:)

答案 13 :(得分:0)

我选择采用不同的方法让它更具未来性,以防万一Apple决定改变某些方面

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

因为(包含项目的子视图)的原点y位置为0然后我可以安全地隐藏其他任何内容而不会有索引超出范围的风险错误

享受

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

答案 14 :(得分:0)

您还可以对UIPickerView进行扩展:

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

然后只需为要更改的每个PickerView调用myPickerView.hideSelectionIndicator()

答案 15 :(得分:-1)

此代码适用于 iOS 10 with swift 3

只需在视图控制器类中添加此代码即可。

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