2010-09-24 9 views
8

ich nach der zweiten Spitze von here. In diesem Tipp werden zwei UIBarButtonItems in einer UIToolbar zusammengefasst. Schließlich wird die UIToolbar zur UINavigationBar hinzugefügt. Nun zu meinen Problemen:UIToolbar mit zwei UIBarButtonItem zu einem UINavigationBar Hinzufügen: schlecht UIToolbar und was iPhone 4

1) Eine weiße Linie ist auf der Oberseite des UIToolbar. Wenn ich die Größe der UIToolbar vergrößere, ist der Gradient falsch. Ich verwende die folgende Größe für die UIToolbar:

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

Wie kann ich die weiße Linie loswerden? Siehe hier:

Das Problem ist, dass es eine weiße statt einer grauen Linie gibt. Wenn es grau wäre, wäre alles perfekt.

2) Was ist mit dem Unterschied der Displaygröße von iPhone 3 und iPhone 4? Muss ich überprüfen, welches iPhone verwendet wird, und dann die Größe verdoppeln?

Edit:

Die Tasten wie im folgenden Beispiel erstellt werden, die ich von der oben genannten Website hat:

// 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 .:

Ich versuchte UIToolbar Unterklasse.

// 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 

Antwort

5

Es gibt keine Garantie, dass UIToolbar nahtlos in einem UINavigationBar zieht; Dies könnte für die weiße Linie, die Sie sehen, verantwortlich sein.

Sie könnten in der Lage sein UIToolbar Unterklasse, so dass sie nicht ziehen (das heißt außer Kraft setzen -drawRect: noch nichts zu tun).

+0

Ich habe versucht, 'UIToolbar' abzuleiten. Jetzt habe ich einen schwarzen Hintergrund für meine Symbolleiste. Welche Funktionen muss ich implementieren, dass ich den gleichen Gradient/Stil von der 'UINavigationBar' bekomme. – testing

+2

Hmmm. Versuchen Sie zusätzlich, 'self.opaque = NO',' self.backgroundColor = [UIColor clearColor] 'und' self.clearsContextBeforeDrawing = YES' in 'initWithFrame:' ​​oder 'initWithCoder:' entsprechend einzustellen. –

+0

Jetzt habe ich 'initWithFrame:' ​​überschrieben (siehe meine bearbeitete Frage). Dies scheint auf den ersten Blick zu funktionieren. Ich habe noch nie ein UI-Element subclassiert. Muss ich mir etwas bewusst sein (Dinge, die nicht funktionieren oder so ähnlich)? – testing

0

1) Ich kann die weiße Linie nicht erklären. Seltsam, dass es nur über deinen Knöpfen ist. Wie werden die Schaltflächen erstellt? Gibt es einen Grund, warum Sie die Höhe auf 44.01 und nicht nur auf 44 setzen? Ich bin nicht davon überzeugt, dass die Höhe, die Sie festgelegt haben, in jedem Fall geehrt wird, sie können gezwungen werden, 44 (jemand korrigiert mich, wenn ich falsch liege).

2) Sie müssen nichts tun, für iPhone 4, wird alles automatisch skaliert.

+0

Die weiße Linie steht nur über meinen Tasten, weil ich meine Tasten in eine UIToolbar stecke. Dann lege ich diese UIToolbar auf die UINavigationBar. Die weiße Linie kommt also von der Größe/Zeichnung meiner UIToolbar. Ja, ist es wichtig, wenn 44.01 oder 44. Die Höhe von 44.01 funktioniert ziemlich gut (außer dieser weißen Linie). Wenn ich 44 nehme, bekomme ich mehr Zeichnungsartefakte. Ich kann auch 50 für die Höhe nehmen. Dann verschwindet die weiße Linie, aber der Verlauf ist nicht mehr der Navigationsbalken. Weitere Informationen zum Erstellen dieses Artefakts finden Sie in meiner bearbeiteten Frage. – testing

0

Haben Sie versucht, diese Tasten nicht in einem Container Hinzufügen UIView und es dann als ein Element hinzugefügt, aber mit UIBarButtonSystemItemFlexibleSpace Manipulation? Ich meine, jede dieser Schaltflächen als eigenständiges Element hinzuzufügen.

+0

Ja, ich habe keine 'UIView' verwendet und sie nicht als unabhängige Elemente hinzugefügt. Stattdessen erstelle ich eine 'UIToolbar', erstelle ein Array von Buttons, füge die Buttons der Toolbar hinzu und füge schließlich die Toolbar zur Navigationsleiste hinzu. Siehe meine bearbeitete Frage für Details. – testing

0

Ein UIToolbar ist entworfen, an der Unterseite des iPhone-Bildschirm verwendet werden, wenn Sie also woanders verwenden wird es versuchen, einen Randeffekt auf der Oberseite zu machen. Um dies zu vermeiden, sollte die Höhe der Werkzeugleiste 2 Pixel größer als die Höhe der Navbar sein. Zu diesem Zeitpunkt haben Sie einen anderen Nebeneffekt, der eine Kante auf der Unterseite der Navigationsleiste freigibt. (Die Navbar findet in jedem Fall das rechteBargeldelement als ausgerichtet in der Mitte)

Verwandte Themen