Проблемы с графикой при использовании сегментированного прокси и прокси UIAppearance - PullRequest
3 голосов
/ 15 февраля 2012

У меня есть приложение с сегментированным элементом управления в заголовке панели, которое используется для переключения между 3 контроллерами навигации. Я использую новые методы прокси внешнего вида для стилизации этого сегментированного элемента управления (код ниже). Однако, кажется, есть какая-то ошибка, которую я не могу выяснить. Появляется, когда я погружаюсь в один из контроллеров навигации, а затем возвращаюсь обратно к корню (который затем снова показывает segmentedControl в верхней панели). Когда это происходит, графика делителя портится, как вы можете видеть на скриншоте (первый показывает, как он должен выглядеть).

Кто-нибудь сталкивался с чем-либо подобным и знает, как это исправить?

Мой код для установки внешнего вида:

  UIImage *segmentSelected            = [[UIImage imageNamed:@"sel"]      resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
UIImage *segmentUnselected          = [[UIImage imageNamed:@"uns"]      resizableImageWithCapInsets:UIEdgeInsetsMake(0, 3, 0, 3)];
UIImage *segmentSelectedUnselected  = [[UIImage imageNamed:@"sel-uns"]  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
UIImage *segUnselectedSelected      = [[UIImage imageNamed:@"uns-sel"]  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];
UIImage *segmentUnselectedUnselected = [[UIImage imageNamed:@"uns-uns"]  resizableImageWithCapInsets:UIEdgeInsetsMake(0, 6, 0, 6)];

[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
      setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
      setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
      setDividerImage:segmentUnselectedUnselected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
      setDividerImage:segmentSelectedUnselected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
      setDividerImage:segUnselectedSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
      setContentPositionAdjustment:UIOffsetMake(8, 0) forSegmentType:UISegmentedControlSegmentLeft barMetrics:UIBarMetricsDefault];
[[UISegmentedControl appearanceWhenContainedIn:[UINavigationBar class], nil] 
      setContentPositionAdjustment:UIOffsetMake(-8, 0) forSegmentType:UISegmentedControlSegmentRight barMetrics:UIBarMetricsDefault];

как это должно выглядеть:

what it is supposed to look like

как это выглядит:

enter image description here

Ответы [ 3 ]

0 голосов
/ 29 мая 2012

У меня была такая же проблема.В конце концов я использовал разделитель изображения шириной 1px -> затем проблема исчезла.

0 голосов
/ 28 ноября 2014

Пожалуйста, убедитесь, что вы используете это в делегате приложения.использовать его в одном месте. Проблема решена. Попробуйте [класс uiview] вместо [класс uinavigationBar]

0 голосов
/ 23 февраля 2012

Я использовал backgroundImage для UINavigatorBar через внешний вид и заметил, что при использовании этого подхода вместе с UISplitViewController / UIPopoverController вся панель навигации перемещается в область содержимого.Таким образом, вы видите только темную синюю границу и настраиваемая панель навигации, расположенная прямо под границей, выглядит очень странно.

Никакой помощи для вас, но это может быть настоящей ошибкой?!

...