0

Ich möchte ein kleines Symbol neben dem Titel in meinem UINavigationController zeigen.Hinzufügen eines Bildes mit einem Titel in einem UINavigationController

Durch die Magie von Photoshop, wie folgt aus:

enter image description here

Ich weiß, ich brauche eine neue Ansicht zu erstellen und das Bild und Titel hinein zu bauen. Hier ist, was ich tue:

In viewDidLoad in der UINavigationController-View-Controller, ich rufe die Methode

[self setTitleBar];

Welche diese Methode aufruft:

- (void) setTitleBar { 


    CGRect navBarFrame = self.navigationController.navigationBar.frame; 


    //UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(navBarFrame.origin.x, navBarFrame.origin.y, (leftButtonFrame.origin.x + leftButtonFrame.size.width) - rightButtonFrame.origin.x, navBarFrame.size.height)]; 
    UIView *titleView = [[UIView alloc] initWithFrame:CGRectMake(navBarFrame.origin.x, navBarFrame.origin.y,self.view.frame.size.width,navBarFrame.size.height)]; 
    titleView.backgroundColor = [UIColor clearColor]; 


    CGPoint tvCenter = CGPointMake(titleView.frame.size.width/2, titleView.frame.size.height/2); 

    UIImage * icon = [UIImage imageNamed:@"star"]; 

    UIImageView *iconView = [[UIImageView alloc] initWithImage:icon]; 
    iconView.frame = CGRectMake(0, 0, icon.size.width, icon.size.height); 

    UILabel *title = [[UILabel alloc] init]; 
    title.backgroundColor = [UIColor clearColor]; 
    title.textColor = [UIColor whiteColor]; 
    title.textAlignment = NSTextAlignmentCenter; 
    title.text = @"SOME TITLE"; 
    title.frame = CGRectMake(0, 0, 100, titleView.frame.size.height); 
    [title sizeToFit]; 


    iconView.center = CGPointMake(tvCenter.x - (icon.size.width/2), tvCenter.y); 

    [titleView addSubview:iconView]; 
    [titleView addSubview:title]; 

    self.navigationItem.titleView = titleView; 
} 

Meine Logik in der Titleview ist : Holen Sie sich den Rahmen der linken Taste und wählen Sie den rechten Rahmen. Dann machen Sie etwas Mathematik, um herauszufinden, wie groß die Aussicht sein kann. Das sollte die Rahmengröße von titleView sein.

Allerdings kann ich nicht scheinen, es zur Arbeit zu bringen. Wenn ich eine Rahmengröße von 0,0,100,40 einstecke; dann zeigt es den Rahmen aber alles ist zusammengequetscht. Aber du siehst es. Ich weiß, dass 100 dynamisch sein sollte, um sicherzustellen, dass der Titel angezeigt wird.

Aber ich kann nicht scheinen, es herauszufinden.

Irgendwelche Hilfe?

+0

Verwenden Sie 'sizeToFit'. Hier ist die Dokumentation https://developer.apple.com/reference/uikit/uiview/1622630-sizetofit?language=objc. –

+0

Passt die Navigationsleiste Ihre Ansicht automatisch an? Wenn ja, sollten Sie dies in einem XIB machen, damit Sie leicht sehen können, wie es aussieht, wenn es in der Größe geändert wird. –

Antwort

0

Sie können Objekte in der Navigation Controller-Ansicht als Teilansichten platzieren.

- (void) setTitleBar { 

    //Let's say your icon size is 20 
    int starSize = 20; 
    //Now you'll have to calculate where to place the ImageView respect the TextSize (for this you'll need to know the text and font of your UINavigationItem title) 
    CGSize textSize = [@"SOME TITLE" sizeWithAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"navfontname" size:15]}]; 
    UIImageView *startImageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.navigationController.view.frame.size.width/2 - textSize.width/2, self.navigationController.view.frame.size.height/2 - starSize/2, starSize,starSize)]; 
    startImageView.image = [UIImage imageNamed:@"star"]; 
    [self.navigationController.view addSubview:startImageView]; 

} 
+0

hmmm .. Ich kann nicht scheinen, dass dies funktioniert. Scheint logisch aber –

+0

Ist es das UIImageView, das als eine Unteransicht zu dem self.navigationController.view hinzugefügt wird? kannst du es sehen, wenn du seinen Frame auf etwas wie CGRectMake (0,0,20,20) aufsetzt? –

+0

Es platziert es in der Mitte des Bildschirms. –

Verwandte Themen