Индикатор выбора UIPickerView не отображается в iOS10
Я создаю свой проект в Xcode 8. Линии разделителя UIPickerView не видны в симуляторе iOS 10 и устройствах, но отлично работают на устройствах и симуляторе iOS 9.3. Я попытался настроить цвет задней панели UIPickerView, автоматические макеты и все возможное в XIB, но ничего не работает. У кого-нибудь есть идея?
Это настраиваемый вид, который содержит 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;
}
Ответы
Ответ 1
У меня была эта точная проблема, когда я перестроил пару решений для iOS10 и развернулся на iOS10 на обоих симуляторах и устройствах.
Я сузил проблему в моем случае, чтобы не добираться до элемента в сборщике во время инициализации. то есть. Я заполняю свой сборщик, и если у нас уже есть выбор для этого свойства, я предварительно его выбираю, и строки присутствуют. Я делаю это во время инициализации, когда я настраиваю свой сборщик.
Итак, мое исправление, которое работало в моем случае использования, состояло в том, чтобы выбрать элемент 0 в случае отсутствия существующего значения.
Objective-C
UIPickerView *pickerView;
...
[pickerView selectRow:0 inComponent:0 animated:YES];
Swift
let pickerView: UIPickerView
...
pickerView.selectRow(0, inComponent: 0, animated: true)
Это было хорошо для моего решения, так как я эффективно выбираю нулевую строку при настройке.
У меня не было возможности вникать в рассуждения или искать более чистое решение, но, поскольку я решил свою проблему, я думал, что поделюсь им здесь, чтобы помочь вам всем, если смогу.
Ответ 2
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 selectRow:0 inComponent:0 animated:YES];
, прежде чем pickerView добавится в superView.
Ответ 3
Я столкнулся с той же проблемой и в iOS10. Вот моя проблема:
![введите описание изображения здесь]()
И я решил эту проблему:
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];
Конечный результат:
![введите описание изображения здесь]()
он работает в моем проекте. Надеюсь, это поможет вам.
Ответ 4
Я не уверен, о каких "разделительных линиях" вы говорите. Я не вижу "разделительных линий" в iOS 9.
Единственными "строками", отсутствующими на снимке экрана, являются индикатор выбора. Вы можете получить их, установив представление выбора showsSelectionIndicator
на YES
. Но вы не должны этого делать; показывая индикатор выбора по умолчанию. Документы говорят:
В iOS 7 и более поздних версиях всегда отображается индикатор выбора
![введите описание изображения здесь]()
Ответ 5
Это мой код:
-(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
}
Ответ 6
Я также сталкиваюсь с той же проблемой. Ниже приведен мой код для создания 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];