我在Xcode 8中构建我的项目.UIPickerView分隔线在iOS 10模拟器和设备中不可见,但在iOS 9.3设备和模拟器上工作正常。我尝试在XIB中调整UIPickerView背景颜色,自动布局和一切可能,但没有任何作用。有人对此有所了解吗?
这是一个包含UIPickerView
的自定义视图-(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;
}
答案 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)
我通过以下方式解决了这个问题:
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];
最终结果:
它适用于我的项目。希望对你有所帮助。
答案 3 :(得分:1)
我不确定你在说什么“分隔线”。我在iOS 9中也看不到“分隔线”。
屏幕截图中唯一缺少的“线条”是选择指示器。您可以通过将选择器视图的showsSelectionIndicator
设置为YES
来获取它们。但你不应该这样做;显示选择指示器是默认值。文档说:
在iOS 7及更高版本中......选择指示符始终显示
答案 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];