02/12/2023
I den stadigt udviklende verden af iOS-applikationer er brugergrænsefladen altafgørende for at fange og fastholde brugernes opmærksomhed. En af de mest synlige og ofte brugte dele af enhver app er navigationsbaren. Standard iOS-navigationsbaren er funktionel, men for at give din app et unikt præg og en mere strømlinet brugeroplevelse, er det ofte en fordel at bygge en tilpasset navigationsbar. Denne dybdegående guide vil føre dig igennem processen med at skabe en skræddersyet navigationsbar fra bunden ved hjælp af Swift og UIKit. Vi vil udforske de tekniske baggrunde, give en trinvis implementeringsvejledning, præsentere kodeeksempler, dele bedste praksisser og diskutere test- og fejlfindingsstrategier.

Hvad Du Vil Lære
- Hvordan man opretter en tilpasset iOS-navigationsbar fra grunden.
- Forståelse af de underliggende koncepter og terminologi.
- Bedste praksisser for at bygge en robust og brugervenlig navigationsbar.
- Praktisk implementering med Swift og UIKit.
- Metoder til effektiv test og fejlfinding af din tilpassede navigationsbar.
Forudsætninger
Før vi dykker ned i detaljerne, er det vigtigt at sikre, at du har de nødvendige forudsætninger på plads:
- Grundlæggende kendskab til Swift-programmering.
- Erfaring med iOS-udvikling og Xcode.
- Kendskab til UIKit-frameworket og dets komponenter.
- Xcode 12 eller nyere installeret.
- Swift 5.5 eller nyere.
- iOS 14 eller nyere som målplatform.
En navigationsbar er mere end blot en simpel bjælke øverst på skærmen; den er et komplekst komponent, der orkestrerer navigationen i din app. Den består typisk af flere vigtige elementer:
Kernekoncepter og Terminologi
- UINavigationBar: Selve navigationsbar-objektet, der håndterer visningen og interaktionen.
- UINavigationItem: Repræsenterer et enkelt element inden i navigationsbaren, såsom en titel, en tilbage-knap eller højre/venstre-knapper. Hver view controller har typisk sit eget
UINavigationItem. - UINavigationButton: En type knap, der kan placeres i navigationsbaren. Disse kan være standardknapper eller helt brugerdefinerede.
- UINavigationController: En container-view controller, der administrerer en stak af view controllere og automatisk håndterer en
UINavigationBarfor den aktuelle view controller.
Hvordan Fungerer Det Under Motorhjelmen?
UINavigationController er den centrale enhed, der styrer UINavigationBar. Når du skubber en ny view controller på navigationsstakken, opdaterer UINavigationController automatisk UINavigationBar med den nye view controllers tilknyttede UINavigationItem. Dette inkluderer at vise den korrekte titel, tilbage-knap (hvis tilgængelig) og eventuelle knapper konfigureret på UINavigationItem. Selvom UINavigationBar kan tilpasses, er det vigtigt at forstå, at den oftest bruges i samspil med en UINavigationController.
Bedste Praksisser og Almindelige Faldgruber
For at sikre en god brugeroplevelse og en vedligeholdelsesvenlig kodebase, er her nogle vigtige bedste praksisser:
- Konsistent Designsprog: Sørg for, at din tilpassede navigationsbar passer ind i din apps overordnede design. Brug ensartede farver, skrifttyper og stilarter.
- Undgå Overdreven Tilpasning: Mens tilpasning er god, så overvej, om en fuldstændig custom løsning er nødvendig. Ofte kan enkle ændringer i titel, farve eller tilføjelse af standardknapper være tilstrækkeligt.
- Brug Standardkomponenter Hvor Muligt: Udnyt UIKit's indbyggede funktionalitet for tilbage-knapper og standardknapper. Dette reducerer kompleksitet og sikrer en velkendt brugeroplevelse.
- Overvej Tastatur- og Tilgængelighedsfunktioner: Sørg for, at din tilpassede navigationsbar fungerer korrekt med VoiceOver og andre tilgængelighedsfunktioner.
- Responsivt Layout: Din navigationsbar skal se godt ud på tværs af forskellige skærmstørrelser og orienteringer. Brug Auto Layout eller Constraints effektivt.
Lad os nu komme i gang med at bygge en tilpasset navigationsbar. Der er flere måder at gribe dette an på, fra simple stilændringer til fuldstændig redesign.
Metode 1: Tilpasning via UINavigationController's Delegate
Den mest almindelige og anbefalede metode til at tilpasse udseendet af en navigationsbar er at bruge UINavigationControllerDelegate. Dette giver dig mulighed for at ændre udseendet af den UINavigationBar, der er forbundet med din UINavigationController.
Trin 1: Opret en Ny Projekt
Start med at oprette et nyt Xcode-projekt. Vælg skabelonen "Single View App" og sørg for at vælge Swift som sprog.
Trin 2: Konfigurer UINavigationController
I din SceneDelegate.swift (eller AppDelegate.swift, afhængigt af din Xcode-version og projektopsætning), skal du sikre dig, at du bruger en UINavigationController som rod-view controlleren.
// I SceneDelegate.swift func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } let viewController = UIViewController() // Din start-view controller viewController.title = "Forside" viewController.view.backgroundColor = .white let navigationController = UINavigationController(rootViewController: viewController) window = UIWindow(windowScene: windowScene) window?.rootViewController = navigationController window?.makeKeyAndVisible() } Trin 3: Tilpas Udseendet
Du kan nu foretage ændringer direkte på navigationBar-egenskaben af din UINavigationController. For eksempel at ændre baggrundsfarven og titlens udseende:
// I din root view controller (f.eks. din AppDelegate eller SceneDelegate) if let navigationBar = navigationController.navigationBar { // Ændr baggrundsfarven navigationBar.barTintColor = UIColor.systemBlue navigationBar.isTranslucent = false // Gør den ikke gennemsigtig for en solid farve // Tilpas titlens udseende navigationBar.titleTextAttributes = [ NSAttributedString.Key.foregroundColor: UIColor.white, NSAttributedString.Key.font: UIFont.boldSystemFont(ofSize: 20) ] // Tilpas knappernes farve (f.eks. tilbage-knappen) navigationBar.tintColor = UIColor.white } Metode 2: Oprettelse af en Helt Brugerdefineret Navigationsbar
Hvis du har brug for et fuldstændig unikt design, der går ud over standardtilpasningerne, kan du oprette din egen UIView, der efterligner en navigationsbar. Dette kræver dog manuel håndtering af navigationselementer og logik.
Trin 1: Opret en Custom UIView Klasse
import UIKit class CustomNavigationBarView: UIView { let titleLabel: UILabel = { let label = UILabel() label.textColor = .white label.font = UIFont.boldSystemFont(ofSize: 22) label.textAlignment = .center return label }() let backButton: UIButton = { let button = UIButton(type: .system) button.setImage(UIImage(systemName: "arrow.left.circle.fill"), for: .normal) button.tintColor = .white // Tilføj her target-action for knappen return button }() override init(frame: CGRect) { super.init(frame: frame) setupViews() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } private func setupViews() { backgroundColor = UIColor.darkGray // Eksempel på baggrundsfarve addSubview(titleLabel) addSubview(backButton) // Brug Auto Layout til at placere elementerne titleLabel.translatesAutoresizingMaskIntoConstraints = false backButton.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ // Title Label Constraints titleLabel.centerXAnchor.constraint(equalTo: centerXAnchor), titleLabel.centerYAnchor.constraint(equalTo: centerYAnchor), // Back Button Constraints backButton.leadingAnchor.constraint(equalTo: leadingAnchor, constant: 16), backButton.centerYAnchor.constraint(equalTo: centerYAnchor), backButton.widthAnchor.constraint(equalToConstant: 40), // Juster efter behov backButton.heightAnchor.constraint(equalToConstant: 40) // Juster efter behov ]) } func configure(title: String) { titleLabel.text = title } } Trin 2: Integrer den Brugerdefinerede Navigationsbar i din View Controller
Tilføj din `CustomNavigationBarView` til din view controller's `view`.
import UIKit class MyCustomNavController: UIViewController { let customNavView = CustomNavigationBarView() override func viewDidLoad() { super.viewDidLoad() view.backgroundColor = .white // Tilføj den brugerdefinerede navigationsbar view.addSubview(customNavView) // Sæt constraints for customNavView customNavView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ customNavView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), customNavView.leadingAnchor.constraint(equalTo: view.leadingAnchor), customNavView.trailingAnchor.constraint(equalTo: view.trailingAnchor), customNavView.heightAnchor.constraint(equalToConstant: 50) // Eller brug en dynamisk højde ]) // Konfigurer titlen customNavView.configure(title: "Min Tilpassede Side") // Tilføj target-action for tilbage-knappen manuelt customNavView.backButton.addTarget(self, action: #selector(backButtonTapped), for: .touchUpInside) } @objc func backButtonTapped() { // Implementer din navigationslogik her (f.eks. navigationController?.popViewController(animated: true)) print("Tilbage-knap trykket!") navigationController?.popViewController(animated: true) } } Bemærk: Når du bruger en fuldstændig brugerdefineret UIView som navigationsbar, skal du selv håndtere al logikken for at skubbe og poppe view controllere fra stakken og opdatere din brugerdefinerede navigationsbar tilsvarende. Dette er betydeligt mere komplekst end at tilpasse den indbyggede UINavigationBar.
Kodeeksempler: Praktiske Scenarier
Her er nogle eksempler på, hvordan du kan tilpasse din navigationsbar:
Eksempel 1: Grundlæggende Tilpasning (Farve og Titel)
Dette er den mest almindelige form for tilpasning, hvor du bevarer den standard UINavigationBar, men ændrer dens udseende.
// I din View Controller's viewDidLoad eller viewWillAppear if let navBar = navigationController?.navigationBar { navBar.barTintColor = .systemPurple navBar.titleTextAttributes = [.foregroundColor: UIColor.white] navBar.largeTitleTextAttributes = [.foregroundColor: UIColor.white] } Eksempel 2: Tilpasning med Custom Right Button
Tilføjelse af en brugerdefineret knap til højre side af navigationsbaren.
// I din View Controller's viewDidLoad let settingsButton = UIBarButtonItem(image: UIImage(systemName: "gearshape.fill"), style: .plain, target: self, action: #selector(settingsTapped)) navigationItem.rightBarButtonItem = settingsButton @objc func settingsTapped() { print("Indstillinger trykket!") // Naviger til indstillingsskærmen } Eksempel 3: Tilpasning med Custom Title View
Erstat standardtitlen med en brugerdefineret UIView, f.eks. et billede eller et segmenteret kontrol.
// Opret en brugerdefineret titel-view let customTitleView = UIView(frame: CGRect(x: 0, y: 0, width: 200, height: 44)) let logoImageView = UIImageView(image: UIImage(named: "YourLogo")) // Antager du har et logo billede logoImageView.contentMode = .scaleAspectFit logoImageView.frame = customTitleView.bounds customTitleView.addSubview(logoImageView) // Sæt den som titleView navigationItem.titleView = customTitleView Opsummering af Tilpasningsmuligheder
Her er en tabel, der opsummerer de primære måder at tilpasse UINavigationBar på:
| Egenskab | Beskrivelse | Eksempel på Brug |
|---|---|---|
barTintColor | Baggrundsfarven på navigationsbaren. | navBar.barTintColor = .systemIndigo |
titleTextAttributes | Attributter for den normale titel (font, farve, skygge). | navBar.titleTextAttributes = [.font: UIFont.systemFont(ofSize: 18), .foregroundColor: UIColor.black] |
largeTitleTextAttributes | Attributter for den store, fremhævede titel. | navBar.largeTitleTextAttributes = [.font: UIFont.boldSystemFont(ofSize: 34)] |
tintColor | Farven på elementer i navigationsbaren som knapper og tilbage-pil. | navBar.tintColor = .white |
isTranslucent | Bestemmer om navigationsbaren er gennemsigtig. | navBar.isTranslucent = false (for en solid farve) |
shadowImage | Et brugerdefineret billede til at erstatte standard skyggelinen. | navBar.shadowImage = UIImage() (fjerner skyggen) |
setBackgroundImage(_:for:) | Sætter et brugerdefineret billede som baggrund for specifikke bar-positioner. | navBar.setBackgroundImage(UIImage(named: "custom_bg"), forToolbarPosition: .any) |
navigationItem.titleView | Tillader indsættelse af en brugerdefineret UIView som titel. | navigationItem.titleView = myCustomView |
navigationItem.leftBarButtonItem / .rightBarButtonItem | Tilføjelse af individuelle knapper til venstre eller højre. | navigationItem.rightBarButtonItem = UIBarButtonItem(...) |
navigationItem.leftBarButtonItems / .rightBarButtonItems | Tilføjelse af flere knapper til venstre eller højre. | navigationItem.rightBarButtonItems = [barButtonItem1, barButtonItem2] |
Test og Fejlfinding
Når du har implementeret din tilpassede navigationsbar, er det afgørende at teste den grundigt.
Teststrategier
- Funktionel Test: Kontroller, at alle knapper fungerer som forventet. Test navigationen mellem forskellige skærme.
- Visuel Test: Gennemgå din app på forskellige enheder (iPhone, iPad) og iOS-versioner for at sikre, at navigationsbaren ser korrekt ud og er responsiv.
- Tilgængelighedstest: Brug VoiceOver til at tjekke, om navigationsbaren er tilgængelig for brugere med synshandicap. Sørg for, at knapper har meningsfulde labels.
- Ydeevnetest: Selvom navigationsbarer sjældent er en flaskehals, skal du være opmærksom på eventuelle forsinkelser, især hvis du bruger komplekse brugerdefinerede views.
Almindelige Fejl og Løsninger
- Problem: Navigationsbaren vises ikke eller ser forkert ud.
- Løsning: Sørg for, at du bruger en
UINavigationControllerkorrekt, og at din view controller er en del af navigationsstakken. Tjek dine constraints, hvis du bruger en brugerdefineretUIView. - Problem: Knapperne er ikke synlige eller har den forkerte farve.
- Løsning: Kontroller
tintColorpå bådeUINavigationBarogUIBarButtonItem. Sørg for, at knapperne ikke er konfigureret med usynlighed eller en uhensigtsmæssig farve. - Problem: Titelteksten overlapper med knapper.
- Løsning: Juster
titleView's størrelse og placering, eller brugnavigationItem.titleog lad systemet håndtere placeringen. BrugleftBarButtonItemsogrightBarButtonItems, hvis du har flere knapper, da systemet så bedre kan beregne pladsen.
Konklusion
At mestre oprettelsen af en tilpasset navigationsbar i iOS giver dig mulighed for at skabe en mere engagerende og personlig brugeroplevelse. Ved at forstå de underliggende UIKit-komponenter og følge bedste praksisser kan du designe og implementere navigationsbarer, der ikke kun ser fantastiske ud, men også fungerer fejlfrit. Uanset om du foretrækker at tilpasse den indbyggede UINavigationBar eller bygge en helt brugerdefineret løsning, giver denne guide dig det nødvendige fundament for succes. Fortsæt med at eksperimentere og finpudse dine designs for at skabe den ultimative brugeroplevelse i dine iOS-apps.
Næste Skridt
Overvej at udforske mere avancerede tilpasninger, såsom animerede overgange for navigationsbaren, integration med SwiftUI eller implementering af dynamiske titler baseret på scroll-position. Held og lykke med din udvikling!
Hvis du vil læse andre artikler, der ligner Tilpas din iOS Navigationsbar, kan du besøge kategorien Teknologi.
