2013-12-16 5 views

ответ

3

Он работает перед ios7.

pickerView.showsSelectionIndicator = NO; 

для получения дополнительной информации в ios7 увидит этот документ

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

+0

Да, уже пробовал, на док-станции ios7 apple говорится, что его нельзя скрыть, я ищу трюк, есть ли способ скрывать индикаторы? – james075

+0

Сейчас нет технического пути. Если вы захотите, то вы сделаете это по своей логике. –

+0

@ James03, я считаю, нашел способ удалить строки, см. Мой ответ. – morksinaanab

3

Это легко достигается. Просто поместите свой PickerView внутри ScrollView с нужным размером вашей строки и используйте делегат pickerView: rowHeightForComponent :), чтобы изменить высоту строки сборщика немного больше, чем ваш ScrollView. Таким образом, линии будут скрыты.

+0

Мне нравится этот метод. пользователю легко видеть, что делать, не занимая слишком большого пространства экрана. –

10

В настройке iOS7 параметр pickerview.showsSelectionIndicator не действует, согласно документации (https://developer.apple.com/library/ios/documentation/userexperience/conceptual/UIKitUICatalog/UIPickerView.html).

Однако, как UIPickerView, в конце концов это UIView с subviews, я проверил, какие подпрограммы там были. Я нашел 3, первый из них содержит все компоненты UIPickerView, а два других - две строки.

Итак, установив второй и третий (индекс 1 и 2), две линии были удалены.

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

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

+5

Кстати. Когда вы удаляете эти строки, внешний вид выглядит странно, потому что 3D-эффект рулона изменяет положение просмотров. Я играл, и вы также можете изменить цвет этих строк следующим образом: '((UIView *) [self.subviews objectAtIndex: 1]). BackgroundColor = [UIColor whiteColor]; ((UIView *) [self.subviews objectAtIndex: 2]). BackgroundColor = [UIColor whiteColor]; ' – morksinaanab

+0

благодарю за ваш ответ, но он выбрал исключение NSRangeException -> - [__ NSArrayI objectAtIndex:]: индекс 1 за пределами для пустых array ' – james075

+0

Я добавил 2 вида, чтобы скрыть эти строки, но это очень уродливо, сейчас нет выбора – james075

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

Используйте это в titleForRow или viewForRow метод делегата от pickerView.

3

Я решил это с помощью простого трюка: Представление выбора места в представлении, а также установить свойство подзаголовка этого представления = true. Теперь просто установите высоту строки в представлении picker = высота представления контейнера, после чего линия исчезнет.

0

Просто написать этот код в методе viewdidload

[[PickerView.subviews objectAtIndex:1] setHidden:TRUE]; 
[[PickerView.subviews objectAtIndex:2] setHidden:TRUE]; 
+0

У меня такое чувство, что это работало только в вашем viewDidLoad, потому что pickerView был полностью определен. Мне пришлось использовать ответ ChrisH выше для Swift, чтобы скрыть линии. Я не уверен, почему у Apple есть настройки, и они игнорируют это. – LevinsonTechnologies

+0

Да Если вы используете интерфейс-построитель, тогда вы получаете команду pickerview. в противном случае вы должны установить это после того, как программно созданный сборщик – BHASKAR

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

Хорошо, это будет намного лучше:] , если у кого-то есть лучший ответ, просто запишите его для обмена :)

7

Это сработало для меня в Swift в iOS 9 Beta.

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

по-прежнему работает в iOS 11. thanks –

19

на основе других ответов, я решил перечислить подвиды и увидел, что линии имеют высоту 0.5 так что мое решение теперь выглядит в Swift:

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 

    pickerView.subviews.forEach({ 

      $0.hidden = $0.frame.height < 1.0 
    }) 

    return myRowCount 
} 

И объективно- C

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 

    [pickerView.subviews enumerateObjectsUsingBlock:^(UIView *subview, NSUInteger idx, BOOL *stop) { 

     subview.hidden = (CGRectGetHeight(subview.frame) < 1.0) 
    }]; 

    return myRowCount 
} 

Очевидно, что это не особенно перспективное доказательство, но, вероятно, больше, чем скрытие подсмотра при заданном индексе.

Edit: обновление для обработки случая, предусмотренного @Loris

+0

Кстати, если вы добавили некоторый subview в UIPickerView, который также имеет высоту 0,5, вы можете использовать '.tag' для этого поднабора в порядке чтобы идентифицировать его и предотвратить скрытие – efimovdk

+1

На iPhone 7 + высота линии равна 2/3 (0,6666666666666667) вместо 0,5, поэтому я выяснил, была ли высота меньше 1. 'func numberOfComponentsInPickerView (pickerView: UIPickerView) -> Int { pickerView.subviews.forEach ({ $ 0.hidden = $ 0.frame.height <= 1 }) возвращение myRowCount } ' – Loris

5

Swift 3 Версия (рабочий):

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

работал для меня, поместил его в функцию viewDidLoad. благодаря! –

+0

Для меня это работа над viewDidApper. – Jaydeep

0

я выбрал другой подход, чтобы сделать его немного более на будущее просто в случае, если Apple решит что-то изменить по строке

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

так как местоположение (subView, содержащее элементы) 0, то я смело могу скрыть что-нибудь еще, не рискуя индекса из оценки точности

Наслаждайтесь

EDIT: Я забыл вам сказать, что я положил его в методе viewDidLayoutSubviews!

-1

Этот код работает отлично IOS 10 с быстрым 3

Просто добавьте этот код в классе контроллера представления.

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

Должны быть сдвиги индекса жесткого кода. Может произойти сбой - это изменения iOS. –

0

Вы также можете сделать пристройку к UIPickerView:

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

А потом просто позвонить myPickerView.hideSelectionIndicator() для каждого PickerView вы хотите изменить.

2
func numberOfComponents(in pickerView: UIPickerView) -> Int 
    { 
     pickerView.subviews.forEach({ 
      $0.isHidden = $0.frame.height < 1.0 
     }) 
     return 1 
    } 
Смежные вопросы