Я настраиваю внешний вид сегментированного элемента управления с помощью этих операторов в делегате приложения.
[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_normal.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setBackgroundImage:[[UIImage imageNamed:@"segmentation_selected.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 0 , 0, 0)]
forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalNormal.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_NormalSelected.png"] forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearance] setDividerImage:[UIImage imageNamed:@"segmentation_divider_SelectedNormal.png"] forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
Результат в порядке. Фон и разделители устанавливаются правильно, когда я выбираю любой из сегментов (сегмент «Порядок» выбирается по умолчанию при первом запуске приложения). Когда я выбираю сегмент Release, как вы можете видеть ниже, все выглядит нормально.
Проблема в том, что когда я выхожу из представления, а затем возвращаюсь в представление (я сохраняю выбранный индекс и устанавливаю его в viewDidLoad для повторного выбора сегмента), разделитель установлен неправильно по неизвестной причине.
Если я нажму на A-Z, а затем отпустите, он исправится. Эта ошибка возникает только тогда, когда представление загружается впервые и выбран сегмент Release или A-Z. Разделитель всегда выглядит нормально, когда выбран порядок и загружается представление.
Размеры изображения: разделитель имеет ширину 2 пикселя (все 3 изображения одинакового размера), ширина каждого фона - 2 пикселя.
Любые идеи или подсказки были бы очень признательны, я тянул за волосы последние 10 часов, пытаясь найти решение для недоступного.
setNeedsDisplay
методUISegmentedControl
после того, как вы установите выбранный индексUISegmentedControl
вviewDidLoad
. Может быть, это решит проблему. - person Zeus Alexander   schedule 25.06.2012