Индикатор выбора 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;
}

6 ответов

У меня возникла именно эта проблема, когда я перестроил пару решений для iOS10 и развернул на iOS10 как на симуляторах, так и на устройствах.

Я сузил проблему в моем случае, чтобы перейти к выбору элемента в окне выбора во время инициализации. то есть. Я заполняю свой инструмент выбора, и если у нас уже есть выбор для этого свойства, я предварительно выбираю его, и строки присутствуют. Я делаю это во время инициализации, когда настраиваю свой сборщик.

Поэтому мое исправление, которое работало в моем случае использования, заключалось в выборе элемента 0 в случае отсутствия существующего значения.

Objective-C

UIPickerView *pickerView;

...

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

стриж

let pickerView: UIPickerView

...

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

Это было хорошо для моего решения, так как я эффективно выбираю нулевую строку при настройке.

У меня не было возможности покопаться в рассуждениях или найти более чистое решение, но, поскольку я решил свою проблему, я решил поделиться ею здесь, чтобы помочь вам всем, если смогу.

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.

Я столкнулся с той же проблемой в 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];

Конечный результат :

это работает в моем проекте. Надеюсь, это поможет вам.

Это мой код:

-(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

}

Я не уверен, о каких "разделительных линиях" вы говорите. Я не вижу "разделительных линий" в iOS 9 также.

Единственные "линии", отсутствующие на снимке экрана, - это индикатор выбора. Вы можете получить их, установив вид выбора showsSelectionIndicator в YES, Но вы не должны этого делать; показывать индикатор выбора по умолчанию. Документы говорят:

На iOS 7 и более поздних версиях... индикатор выбора всегда отображается

Решил эту проблему с помощью подкласса 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)
        }
    }

Я также сталкиваюсь с той же проблемой. Ниже мой код для создания 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];
Другие вопросы по тегам