Почему мои сегменты UISegmentControl выделяются в iOS 8, когда я устанавливаю фоновые изображения для всех состояний?
В iOS 6/7 я использовал UISegmentedControl
с фоновыми изображениями, чтобы создать такой эффект:
![Customized UISegmentedControl]()
Я выполнил это, установив фоновое изображение для UISegmentedControl
для каждого из стандартных состояний, например:
UIImage *segmentedControlBackgroundImage = [UIImage imageNamed:@"profileSegmentedControlBackground"];
UIImage *segmentedControlBackgroundSelectedImage = [UIImage imageNamed:@"profileSegmentedControlBackgroundSelected"];
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundImage forState:UIControlStateDisabled barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
Когда сегмент становится выделенным или подсвечивается, он имеет симпатичную синюю полосу внизу, и я устанавливаю атрибуты текста, чтобы изменить цвет текста на синий. Там есть дополнительный код для разделителей, но я думаю, что это не связано, поэтому я опустил его.
Моя проблема в том, что в iOS 8 есть несколько действий, которые заставляют фон сегмента седеть и выглядеть плохо; Когда вы меняете свой выбор, ячейка, которую вы набрали, становится серым до тех пор, пока переход не завершится, а другой - если вы нажмете и удерживаете уже выбранный сегмент, он станет серым. Оба они выглядят одинаково и могут быть видны ниже.
![UISegmentedControl with strange highlighting]()
Некоторые дополнительные фрагменты возможной информации:
-
tintColor
для segmentedControl ясен
- Я не подклассы
UISegmentedControl
- Я не изменил никаких свойств для
UISegmentedControl
, используя его внешний прокси-сервер
- Я использую 1-точечные изображения для фоновых изображений, а
UISegmentedControl
автоматически определяет capInsets и строит изображение
Ответы
Ответ 1
Причина, по которой сегмент становится серым при выборе уже выбранного сегмента, состоит в том, что сегментированный элемент управления не имеет состояния для выбранного и подсвеченного одновременно.
В вашем случае вызов:
[self.segmentedControl setBackgroundImage:segmentedControlBackgroundSelectedImage forState:UIControlStateSelected | UIControlStateHighlighted barMetrics:UIBarMetricsDefault];
должна исправить эту проблему.
когда вы меняете свой выбор, ячейка, которую вы набрали, становится серым до тех пор, пока переход завершается
Я не мог воспроизвести этот, но, возможно, это исправит обе проблемы.
Ответ 2
На всякий случай, в Swift это будет
segmentedControl.setBackgroundImage(image, forState:[.Selected, .Highlighted], barMetrics:.Default)