UIPickerView选择指示器在iOS10中不可见

时间:2016-09-19 02:44:31

标签: ios objective-c uipickerview ios10 xcode8

我在Xcode 8中构建我的项目.UIPickerView分隔线在iOS 10模拟器和设备中不可见,但在iOS 9.3设备和模拟器上工作正常。我尝试在XIB中调整UIPickerView背景颜色,自动布局和一切可能,但没有任何作用。有人对此有所了解吗?

这是一个包含UIPickerView

的自定义视图

enter image description here

-(void)layoutSubviews{
isShown = NO;
[super layoutSubviews];

//self.selectedDic = nil;

self.doneBtn.tintColor = COLOR_DB3535;
self.pickerView.backgroundColor = COLOR_DEDEDE;
self.pickerView.showsSelectionIndicator = YES;

[self.doneBtn setTitle:NSLocalizedString(@"App_Generic_Button_Text_Done", @"")];
}


-(UIView*)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
label.tintColor = [UIColor clearColor];
label.backgroundColor = [UIColor yellowColor];
label.textColor = COLOR_666;
label.font = [FontsManager getFONT_ROBOTO_LIGHT_16];
label.textAlignment = NSTextAlignmentCenter;
NSDictionary *dict = [dataArray objectAtIndex:row];
label.text = @"Test";
return label;
}

7 个答案:

答案 0 :(得分:33)

当我为iOS10重建了几个解决方案并在模拟器和设备上部署到iOS10时,我遇到了这个问题。

在我的情况下,我缩小了在初始化期间选择拾取器中的项目的问题。即。我填充了我的选择器,如果我们已经选择了这个属性,那么我预先选择它并且线条存在。我在初始化期间设置选择器时执行此操作。

所以我的修复,在我的用例中起作用,是在没有现有值的情况下选择0元素。

<强>目标C

UIPickerView *pickerView;

...

[pickerView selectRow:0 inComponent:0 animated:YES];

<强>夫特

let pickerView: UIPickerView

...

pickerView.selectRow(0, inComponent: 0, animated: true)

这对我的解决方案来说很好,因为我在设置时有效地选择了行零。

我没有机会深入了解推理或寻找更清洁的解决方案,但是既然我已经解决了我的问题,我想我会在这里分享一下,如果我能帮助你们可以。

答案 1 :(得分:12)

UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 44, 320, 200)];
pickerView.backgroundColor = [UIColor whiteColor];
pickerView.dataSource = self;
pickerView.delegate = self;
[pickerView selectRow:0 inComponent:0 animated:YES];
[self.view addSubview:pickerView];

在将pickerView添加到superView之前添加代码[pickerView selectRow:0 inComponent:0 animated:YES];

答案 2 :(得分:5)

我在iOS10中也面临同样的问题。这是我的问题: enter image description here

我通过以下方式解决了这个问题:

 self.pickerView.backgroundColor = COLOR_DEDEDE;
 self.pickerView.showsSelectionIndicator = YES;
    for (UIView *view in self.pickerView.subviews) {
        if (view.bounds.size.height < 2.0f && view.backgroundColor == nil) {
            view.backgroundColor = PICK_Line_COLOR; // line color
        }
    }

注意:

  

这个代码可以在方法之后调用:[self.view addSubview:pickeView];

最终结果:

enter image description here

它适用于我的项目。希望对你有所帮助。

答案 3 :(得分:1)

我不确定你在说什么“分隔线”。我在iOS 9中也看不到“分隔线”。

屏幕截图中唯一缺少的“线条”是选择指示器。您可以通过将选择器视图的showsSelectionIndicator设置为YES来获取它们。但你不应该这样做;显示选择指示器是默认值。文档说:

  

在iOS 7及更高版本中......选择指示符始终显示

enter image description here

答案 4 :(得分:1)

这是我的代码:

-(UIView*)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{

    for(UIView *single in pickerView.subviews)
    {
        if (single.frame.size.height < 1)
        {
            single.backgroundColor = [UIColor grayColor];
        }
    }
   //other code

}

答案 5 :(得分:1)

使用UIPickerView的子类解决了此问题:

import UIKit

    class FixedPickerView: UIPickerView, UIPickerViewDelegate {

        override func willMove(toSuperview newSuperview: UIView?) {
            self.delegate = self
            self.selectRow(0, inComponent: 0, animated: true)
            self.delegate = nil
            super.willMove(toSuperview: newSuperview)
        }
    }

答案 6 :(得分:-2)

我也面临同样的问题。下面是我创建UIPickerView的代码:

self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, frame.size.height - 216, frame.size.width, 216)];
self.pickerView.dataSource = self;
self.pickerView.delegate = self;
self.pickerView.backgroundColor = [UIColor whiteColor];
self.pickerView.showsSelectionIndicator = YES;
[self addSubview:self.pickerView];