2010-09-24 10 views
8

Podążam za drugą wskazówką od here. W tej końcówce dwa elementy UIBarButtonItems są umieszczane na pasku UIToolbar. Ostatecznie pasek UIToolbar jest dodawany do paska UINavigationBar. Teraz do moich problemów:Dodawanie paska UIToolbar z dwoma elementami UIBarButtonItem do paska UINavigationBar: słaby pasek UIToolbar, a co z iPhone 4

1) Biała linia jest na szczycie paska UIToolbar. Jeśli zwiększę rozmiar paska UIToolbar, gradient jest nieprawidłowy. Dla paska UITool używam następującego rozmiaru:

UIToolbar *toolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 90, 44.01)]; 

Jak mogę pozbyć się białej linii? Zobacz tutaj: alt text

Problem polega na tym, że zamiast szarej linii jest biały. Gdyby było szaro, wszystko byłoby idealnie.

2) A co z różnicą w rozmiarze wyświetlacza iPhone 3 i iPhone 4? Czy muszę sprawdzić, który iPhone jest używany, a następnie podwoić rozmiar?

Edit:

Przyciski są tworzone tak jak w poniższym przykładzie wziąłem od wyżej wymienionej stronie internetowej:

// create a toolbar to have two buttons in the right 
UIToolbar* tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 133, 44.01)]; 

// create the array to hold the buttons, which then gets added to the toolbar 
NSMutableArray* buttons = [[NSMutableArray alloc] initWithCapacity:3]; 

// create a standard "add" button 
UIBarButtonItem* bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:NULL]; 
bi.style = UIBarButtonItemStyleBordered; 
[buttons addObject:bi]; 
[bi release]; 

// create a spacer 
bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
[buttons addObject:bi]; 
[bi release]; 

// create a standard "refresh" button 
bi = [[UIBarButtonItem alloc] 
initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refresh:)]; 
bi.style = UIBarButtonItemStyleBordered; 
[buttons addObject:bi]; 
[bi release]; 

// stick the buttons in the toolbar 
[tools setItems:buttons animated:NO]; 

[buttons release]; 

// and put the toolbar in the nav bar 
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:tools]; 
[tools release]; 

@ tc .:

Próbowałem podklasy UIToolbar.

// MyToolbar.h 

#import <Foundation/Foundation.h> 


@interface MyToolbar : UIToolbar { 

} 

@end 

// MyToolbar.m 

#import "MyToolbar.h" 


@implementation MyToolbar 

- (void)drawRect:(CGRect)rect { 
    // do nothing 
} 

- (id)initWithFrame:(CGRect)aRect { 
    if ((self = [super initWithFrame:aRect])) { 
     self.opaque = NO; 
     self.backgroundColor = [UIColor clearColor]; 
     self.clearsContextBeforeDrawing = YES;  
    } 
    return self; 
} 

@end 

Odpowiedz

5

Nie ma gwarancji, że pasek narzędzi UIToolbar będzie płynnie wsuwać się do paska UINavigationBar; to może być odpowiedzialny za białą linię, którą widzisz.

Możesz być w stanie podklasy UIToolbar, aby nie rysować (tj. Przesłonięcie -drawRect: aby nic nie zrobić).

+0

Próbowałem podklasy 'UIToolbar'. Teraz mam czarne tło dla mojego paska narzędzi. Jakie funkcje muszę zaimplementować, aby uzyskać ten sam gradient/styl z 'UINavigationBar'. – testing

+2

Hmmm. Spróbuj dodatkowo ustawić 'self.opaque = NO',' self.backgroundColor = [UIColor clearColor] 'i' self.clearsContextBeforeDrawing = YES' w 'initWithFrame:' ​​lub 'initWithCoder:' odpowiednio. –

+0

Teraz nadpisałem 'initWithFrame:' ​​(zobacz moje edytowane pytanie). To wydaje się działać na pierwszy rzut oka. Nigdy wcześniej nie subklasowałem elementu interfejsu użytkownika. Czy muszę być świadomy czegoś (rzeczy, które nie działają lub coś w tym stylu)? – testing

0

1) Nie mogę wytłumaczyć białej linii. Ciekawy, że jest tylko nad twoimi przyciskami. Jak są tworzone przyciski? Czy istnieje powód, dla którego ustawiasz wysokość na 44.01 zamiast na 44? Nie jestem przekonany, że wysokość, którą ustawisz, jest honorowana w każdym przypadku, mogą być zmuszeni do 44 (ktoś mnie poprawi, jeśli się mylę).

2) Nie musisz nic robić dla iPhone 4, wszystko jest skalowane automatycznie.

+0

Biała linia jest tylko nad moimi przyciskami, ponieważ umieszczam moje przyciski w pasku UIToolbar. Następnie umieściłem ten pasek UIToolbar na UINavigationBar. Więc biała linia pochodzi z rozmiaru/rysunku mojego paska UIToolbar. Tak, to ma znaczenie, jeśli 44.01 lub 44. Wysokość 44.01 działa całkiem dobrze (z wyjątkiem tej białej linii). Jeśli wezmę 44, otrzymam więcej artefaktów rysowania. Mogę też wziąć 50 za wysokość. Następnie biała linia znika, ale gradient nie jest już taki sam jak pasek nawigacji. Zobacz moje zredagowane pytanie, aby uzyskać szczegółowe informacje na temat tworzenia tego artefaktu. – testing

0

Czy warto dodać te przyciski nie wewnątrz kontenera UIView a następnie dodanie go jako elementu ale manipulowanie UIBarButtonSystemItemFlexibleSpace? Mam na myśli dodanie każdego z tych przycisków jako niezależnego przedmiotu.

+0

Tak, nie użyłem "UIView" i nie dodałem ich jako niezależnych elementów. Zamiast tego tworzę 'UIToolbar', tworzę tablicę przycisków, dodam przyciski do paska narzędzi i wreszcie dodaję pasek narzędzi do paska nawigacji. Zobacz moje edytowane pytanie, aby poznać szczegóły. – testing

0

Pasek narzędzi UIToolbar jest przeznaczony do używania w dolnej części ekranu iPhone'a, więc jeśli użyjesz go w innym miejscu, spróbujesz uzyskać efekt krawędziowy na wierzchu. Aby tego uniknąć, wysokość paska narzędzi powinna być o 2 piksele większa niż wysokość paska nawigacji. Bu tym razem będziesz mieć inny efekt uboczny, który spowoduje, że krawędź będzie wyraźna na dolnej stronie paska nawigacyjnego. (W każdym przypadku navbar umieszcza prawy pasek znaków jako wyrównany w środku)

Powiązane problemy