it-swarm.com.de

Ändern Sie die Höhe der UINavigationBar

Kann mir jemand sagen, wie man die Höhe der Navigationsleiste ändert? 

Folgendes habe ich bisher:

CGFloat navBarHeight = 10;
self.navigationController.navigationBar.frame.size.width = navBarHeight;
22
Oceandrive

Sie können eine Kategorieklasse basierend auf UINavigationBar wie folgt erstellen

.h Datei

#import UIKit/UIKit.h    
@interface UINavigationBar (myNave)
- (CGSize)changeHeight:(CGSize)size;
@end

und .m Datei

#import "UINavigationBar+customNav.h"
@implementation UINavigationBar (customNav)
- (CGSize)sizeThatFits:(CGSize)size {
    CGSize newSize = CGSizeMake(320,100);
    return newSize;
}
@end

Es funktioniert sehr schön.

25
Shimon Wiener

Sie sollten die Höhe der Navigationsleiste nicht ändern. Aus dem Apple-Programmierhandbuch auf View Controller:

Anpassen der Navigationsleiste

In einer Navigationsschnittstelle besitzt ein Navigationscontroller sein UINavigationBar-Objekt und ist für dessen Verwaltung verantwortlich. Es ist nicht zulässig, das Navigationsleistenobjekt oder seine Grenzen, Rahmen oder Alpha-Werte direkt zu ändern. Es gibt jedoch einige Eigenschaften, die geändert werden dürfen, einschließlich der folgenden:

● barStyle-Eigenschaft

● durchscheinende Eigenschaft

● tintColor-Eigenschaft

(entnommen von Apple: https://developer.Apple.com/library/ios/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/NavigationControllers.html )

- UPDATE - IOS 7 --- Es können immer nur die verfügbaren Eigenschaften geändert werden. Nachfolgend finden Sie jedoch eine gute Anleitung, wie Sie Flexibilität in der Navigationsleiste erreichen. Http://www.appcoda.com/ anpassen-navigation-status-bar-ios-7 /

21
Gil Margolin

sizeThatFits: Funktioniert nicht mehr mit UINavigationBar-Unterklassen von iOS11. Apple Engineering hat bestätigt, dass diese Technik nie unterstützt wurde und mit iOS11 sizeThatFits: wird nicht mehr konsultiert.

7
ghr

Ich habe dieses Problem gelöst, ich habe die Unterklasse von UINavigationController erstellt. In dieser MainNavigationViewController.m-Datei schreibe ich die viewDidLayoutSubviews () -Methode neu, wobei ich den Rahmen für self.navigationBar setze

7
Yerkezhan

Versuchen Sie es mit -

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
6
Cliff Viegas

Überschreiben Sie die (void) viewWillAppear-Methode im viewController, und versuchen Sie den folgenden Code:

- (void)viewWillAppear {

UINavigationBar *navigationBar = [[self navigationController] navigationBar];
CGRect frame = [navigationBar frame];
frame.size.height = 82.0f;
[navigationBar setFrame:frame];
}
6
Augustine P A

Die einfachste und effektivste Lösung ist das Hinzufügen einer Kategorie zur Navigationsleiste. (aber vielleicht nicht die beste lösung)

@interface UINavigationBar (CustomHeight)

@end


@implementation UINavigationBar (CustomHeight)

- (CGSize)sizeThatFits:(CGSize)size {
    CGRect screenRect = [[UIScreen mainScreen] bounds];
    return CGSizeMake(screenRect.size.width, kNavBarHeightNoStatus);
}
@end

knavBarHeightNoStatus ist die Höhe Ihrer Navigationsleiste. Wir verwenden UIScreen-Begrenzungen, da der Frame von UINavigationBar falsch ist

PS: Seien Sie vorsichtig, Sie können Probleme mit einem SideMenu haben

4
Beninho85

self.navigationController.navigationBar.frame ist eine readonly-Eigenschaft in iOS Version 4.x

es wird zwar geändert, aber Sie sehen ein abnormales Verhalten.

wenn beispielsweise der App-Status in den Hintergrund geändert wurde und der Vordergrund wieder angezeigt wird, zeigt die Navigationsleiste die Höhe in Originalgröße an 

3
tachikoma

Ich bin je nach gewählter Methode auf viele Probleme gestoßen. In meinem speziellen Fall war die Navigationsleiste in der gesamten App ausgeblendet, außer im Settings-Controller. Da ich eine benutzerdefinierte Höhe der Navigationsleiste angeben und gleichzeitig die Navigationsleiste anzeigen musste, hatte der Übergang zwischen dem Quellansicht-Controller und dem Einstellungen-Ansicht-Controller eine sehr schlampige Animation. 

Die absolut beste Lösung finden Sie hier: https://Gist.github.com/maciekish/c2c903d9b7e7b583b4b2 . Ich habe gerade die Kategorie in den Settings View Controller importiert und in viewDidLoad die setHeight:-Methode für `self.navigationController.navigationBar 'aufgerufen. Sieht großartig aus!

2
Josh Gafni

Der folgende Code wirkt sich nicht auf andere Parameter im Rahmen außer der Höhe aus

 [self.navigationController.navigationBar setFrame:CGRectMake(self.navigationController.navigationBar.frame.Origin.x, self.navigationController.navigationBar.frame.Origin.y, self.navigationController.navigationBar.frame.size.width, 150)];

wenn Sie andere Parameter ändern möchten, bearbeiten Sie einfach einen beliebigen Parameter.

1
abdul sathar

Wenn Sie eine Kategorie erstellen und sizeThatFits (_ size: CGSize) -> CGSize überschreiben, ändert sich die Größe der UINavigationBar in der gesamten App. Angenommen, Sie möchten die Höhe/Größe der UINavigationBar nur in einem bestimmten ViewController ändern (in meinem Fall).

So habe ich es gemacht.

extension UINavigationBar {
    open override func sizeThatFits(_ size: CGSize) -> CGSize {
        let v = self.value(forKey: "frame") as? CGRect
        return v?.size ?? CGSize(width: UIScreen.main.bounds.width, height: 44)
    }
}

in caller würde ViewController aussehen

override func viewDidLoad() {
    super.viewDidLoad()
    configureNavigationBar()
}

private func configureNavigationBar() {
    var naviBarFrame = self.navigationController?.navigationBar.frame
    naviBarFrame?.size.height = 74
    let rect = naviBarFrame ?? CGRect(x: 0, y: 20, width: UIScreen.main.bounds.width, height: 74)
    self.navigationController?.navigationBar.setValue(rect, forKey: "frame")
}
0

Versuchen Sie diesen Code innerhalb der- (void)viewDidLayoutSubviews-Methode.

CGFloat navBarHeight = 10.0f;    
CGRect frame = CGRectMake(0.0f, 0.0f, 320.0f, navBarHeight);
[self.navigationController.navigationBar setFrame:frame];
0
Group