2013-03-27 2 views
0

Я custumizing всех сегментированных управлений в моем приложении с помощью следующей code.Initially я установить выбранный сегмент для индекса 2.UISegmentedControl неправильно dividerImage

Все отлично работает в IOS 6.While я тестировал приложение на IOS5, Я понял, что исходная настройка сегментированного элемента управления имеет ошибку. Разделительное изображение между выбранным и невыбранным состоянием не задано правильно. До этого он выглядит так.

Если я изменяю выбранные сегменты, нажав на сегментированный контроль, он работает нормально. Это очень странно. Что делать, чтобы предотвратить это странное поведение?

Initial setting

 UISegmentedControl *localSegmentedControl = [[UISegmentedControl alloc] init]; 

    if ([localSegmentedControl respondsToSelector:@selector(setBackgroundImage:forState:barMetrics:)]) { 

    UIImage *segmentUnselectedSelectedDivider  = [UIImage imageNamed:@"segmentedControlSeperatorNS.png"]; 
    UIImage *segmentSelectedUnselectedDivider  = [UIImage imageNamed:@"segmentedControlSeperatorSN.png"]; 
    UIImage *segmentUnselectedUnselectedDivider  = [UIImage imageNamed:@"segmentedControlSeperatorNN.png"]; 

    UIImage *segmentUnselected = [[UIImage imageNamed:@"barButtonPlain.png"] stretchableImageWithLeftCapWidth:7 topCapHeight:0]; 
    UIImage *segmentSelected = [[UIImage imageNamed:@"doneButton.png"] stretchableImageWithLeftCapWidth:7 topCapHeight:0]; 


    [[UISegmentedControl appearance] setBackgroundImage:segmentUnselected 
               forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
    [[UISegmentedControl appearance] setBackgroundImage:segmentSelected 
               forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 


    [[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselectedDivider 
           forLeftSegmentState:UIControlStateNormal 
            rightSegmentState:UIControlStateNormal 
              barMetrics:UIBarMetricsDefault]; 

    [[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselectedDivider 
           forLeftSegmentState:UIControlStateSelected 
            rightSegmentState:UIControlStateNormal 
              barMetrics:UIBarMetricsDefault]; 

    [[UISegmentedControl appearance] setDividerImage:segmentUnselectedSelectedDivider 
           forLeftSegmentState:UIControlStateNormal 
            rightSegmentState:UIControlStateSelected 
              barMetrics:UIBarMetricsDefault]; 


} 
+0

Возможный дубликат [странное поведение с UISegmentedControl и UIAppearance] (http://stackoverflow.com/questions/11183519/weird-behavior-with-uisegmentedcontrol-and-uiappearance) - мой ответ там работает. – jrturton

ответ

1

После попытки все соответствующие подходили объяснены в Customizing UISegmentedControl in iOS 5

я понял, что проблема связана с шириной разделения line.The учебник о сегментированной управления настройкой в ​​http://www.raywenderlich.com/4344/user-interface-customization-in-ios-5 предполагает, что разделительные изображения шире, чем 2px (в сетчатке). Я сделал их ровно 2px в ширину, и проблема решена.

0

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

Customizing UISegmentedControl in iOS 5

+0

да я видел нить, но ни один из подходов не помог мне –

0

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

UIImage *segmentSelected = 
[[UIImage imageNamed:@"ikisiSecildiKirmizi.png"] 
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)]; 
UIImage *segmentUnselected = 
[[UIImage imageNamed:@"ikisiSecilmediGri.png"] 
resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)]; 
UIImage *segmentSelectedUnselected = 
[[UIImage imageNamed:@"solSecili.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)]; 
UIImage *segUnselectedSelected = 
[[UIImage imageNamed:@"sagSecili.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)]; 

UIImage *segmentUnselectedUnselected = 
[[UIImage imageNamed:@"ikisideSecilmemis.png"]resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 5, 15)]; 

[fiyatSaat setBackgroundImage:segmentUnselected 
        forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; 
[fiyatSaat setBackgroundImage:segmentSelected 
        forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; 

[fiyatSaat setDividerImage:segmentUnselectedUnselected 
     forLeftSegmentState:UIControlStateNormal 
     rightSegmentState:UIControlStateNormal 
       barMetrics:UIBarMetricsDefault]; 

[fiyatSaat setDividerImage:segmentSelectedUnselected 
     forLeftSegmentState:UIControlStateSelected 
     rightSegmentState:UIControlStateNormal 
       barMetrics:UIBarMetricsDefault]; 

[fiyatSaat setDividerImage:segUnselectedSelected 
     forLeftSegmentState:UIControlStateNormal 
     rightSegmentState:UIControlStateSelected 
       barMetrics:UIBarMetricsDefault]; 

NSDictionary *attributes = [NSDictionary dictionaryWithObject:[UIColor blackColor] 
                 forKey:UITextAttributeTextColor]; 
[fiyatSaat setTitleTextAttributes:attributes 
         forState:UIControlStateNormal]; 
NSDictionary *attributes2 = [NSDictionary dictionaryWithObject:[UIColor whiteColor] 
                 forKey:UITextAttributeTextColor]; 
[fiyatSaat setTitleTextAttributes:attributes2 
         forState:UIControlStateHighlighted]; 
+0

Каков размер ваших сегментов backgroudns и линий разделения? –

+0

сегментные фоны и линии разделения одинакового размера 33x34 для отображения сетчатки –