2013-10-10 11 views
8

Mam problem, który do tej pory nie mogę znaleźć rozwiązania. Dodaję nową funkcję do mojej aplikacji i chcę dodać drugi UIBarButtonItem po lewej stronie mojego paska UINavigationBar. Z jakiegoś powodu iOS 7 bierze to jako button1, grandCanyon, button2. Nie mogę znaleźć żadnego sposobu na usunięcie absurdalnego odstępu między tymi dwoma przyciskami, co również powoduje, że mój tytuł nie jest wyrównany. Czy ktoś może pomóc !? Czy istnieje rozwiązanie tego!?iOS 7 UIBarButtonItem, absurdalny, problem z odstępem między wierszami

enter image description here

Kod:

UIBarButtonItem *firstButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"firstButton"] style:UIBarButtonItemStylePlain target:self action:@selector(showSettings)]; 
UIBarButtonItem *secondButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"secondButton"] style:UIBarButtonItemStylePlain target:self action:@selector(showAttachments)]; 
[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObjects:firstButton, secondButton, nil]]; 
+0

Wyświetl kod służący do konfigurowania przycisków. – rmaddy

+0

Umieść kod w swoim pytaniu, aby inni mogli go przeczytać. – rmaddy

+0

Ups, gotowe. Nie zdawałem sobie sprawy, że mogę edytować post, przepraszam. – KelticKoder

Odpowiedz

4

Pomyśl udało mi się rozwiązać ten problem za pomocą niestandardowy widok, jak pokazano poniżej, nie jest idealny (wybór przyciemnia przyciski, a nie jaśniej na przykład), ale spróbuję to naprawić jutro. Cieszę się, że mój ból głowy się skończył! Dziękuję za pomoc, to doprowadziło mnie do kilku nowych podejść, których nie próbowałem.

UIImage *firstButtonImage = [UIImage imageNamed:@"firstButton"]; 
firstButtonImage = [firstButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

UIButton *firstButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
[firstButton setImage:firstButtonImage forState:UIControlStateNormal]; 
[firstButton addTarget:self action:@selector(firstButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 

UIImage *secondButtonImage = [UIImage imageNamed:@"secondButton"]; 
secondButtonImage = [secondButtonImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; 

UIButton *secondButton = [[UIButton alloc] initWithFrame:CGRectMake(45, 0, 35, 35)]; 
[secondButton setImage:secondButtonImage forState:UIControlStateNormal]; 
[secondButton addTarget:self action:@selector(secondButtonPressed) forControlEvents:UIControlEventTouchUpInside]; 

UIView *leftBarItemsView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 80, 35)]; 
[leftBarItemsView addSubview:firstButton]; 
[leftBarItemsView addSubview:secondButton]; 

UIBarButtonItem *leftBarItem = [[UIBarButtonItem alloc] initWithCustomView:leftBarItemsView]; 

[self.navigationItem setLeftBarButtonItems:[NSArray arrayWithObject:leftBarItem]]; 
+1

Wielkie dzięki za to. Natknąłem się dzisiaj na ten sam problem i rozwiązałem go, używając Twojej odpowiedzi. – Isuru

+0

Wygląda na to, że w iOS 7 rozkłada także UIBarButtonItems na pasku UIToolbar. Ustawiłem kopalnię na przycisk, etykietę, przycisk, etykietę, elastyczną spację i jest wyświetlane jako przycisk, etykieta, giętka, przycisk, etykieta – zambono

2

Nie może być lepszy sposób, ale aby poprawić odstępy kwestie dotyczące przedmiotów przycisk paska na iOS 7, mam podklasy UINavigationBar i nadpisane metody layoutSubviews. Tam możesz przenosić każdy element przycisku paska, gdziekolwiek chcesz.

Jako przykład:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // If iOS 7, fix the bar button positions 
    BOOL isIOS7 = [[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending; 
    if (isIOS7) 
    { 
     for (UIBarButtonItem *item in self.topItem.leftBarButtonItems) 
     { 
      // Reposition the customView property 
     } 

     for (UIBarButtonItem *item in self.topItem.rightBarButtonItems) 
     { 
      // Reposition the customView property 
     } 
    } 
} 

Faktycznie, jak spojrzałem na mojego kodu, używałem UIBarButtonItems z widoków niestandardowych. Tak więc mogłem przenieść niestandardową pozycję widoku.

Najprawdopodobniej trzeba pętli przez subviews z UINavigationBar aby przenieść je, jeśli jesteś po prostu używając UIBarButtonItems z obrazami tak:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    // If iOS 7, fix the bar button positions 
    BOOL isIOS7 = [[[UIDevice currentDevice] systemVersion] compare:@"7" options:NSNumericSearch] != NSOrderedAscending; 
    if (isIOS7) 
    { 
     for (UIView *subview in self.subviews) 
     { 
      // Reposition as needed 
     }  
    } 
} 
+0

Czy masz przykład tego, co zmieniłeś w drawRect :, nie jestem pewien, jak bym to zrobił. – KelticKoder

+0

Pewnie jedna sekunda, zaktualizuję moją odpowiedź –

+0

Zaktualizowano. Również dobrze o co prosiłeś, miałem pomyłkę i jest to metoda layoutSubviews, a nie drawRect. –

Powiązane problemy