11/07/2024
I den moderne app-udviklingsverden er en intuitiv og effektiv brugergrænseflade altafgørende. En af de mest populære navigationselementer, der har vundet frem, er sidebjælken, ofte kendt som en "slide-out" eller "hamburger" menu. Dette element, der oprindeligt blev populariseret af Facebook-appen, giver brugerne mulighed for at få adgang til yderligere funktioner og indhold uden at optage værdifuld skærmplads. Denne artikel vil guide dig gennem forskellige metoder til at implementere en sådan sidebjælke på din iPhone-app, med fokus på både SwiftUI og traditionelle metoder ved brug af tredjepartsbiblioteker.

Hvad er en Slide-Out Sidebjælke?
En slide-out sidebjælke er et navigationspanel, der glider ind fra siden af hovedindholdsområdet, typisk fra venstre eller højre. Dette panel indeholder en uafhængig, scrollbar visning, der fungerer som appens primære navigation. Designmønsteret er især effektivt til at organisere et stort antal menupunkter og funktioner på en overskuelig måde. Når menuen er skjult, kan brugerne normalt åbne den ved at trykke på et ikon i navigationslinjen (ofte et "hamburger"-ikon med tre vandrette streger) eller ved at swipe fra kanten af skærmen. Lukning af menuen sker typisk ved at trykke på ikonet igen, swipe tilbage eller trykke på hovedindholdsområdet.
- Pladsbesparelse: Skjuler navigationselementer, hvilket frigør skærmplads til indholdet.
- Tilgængelighed: Gør det nemt for brugerne at få adgang til alle appens sektioner fra et hvilket som helst skærmbillede.
- Organisering: Ideel til apps med mange funktioner eller kategorier.
- Brugeroplevelse: Giver en moderne og velkendt brugergrænseflade, som mange brugere er vant til.
Metode 1: Brug af SWRevealViewController (Objektiv-C/Swift)**
En af de mest populære og robuste måder at implementere en slide-out sidebjælke på iOS er ved at bruge tredjepartsbiblioteket SWRevealViewController. Dette bibliotek, udviklet af John Lluch, er gratis og giver en hurtig og nem måde at integrere denne funktionalitet på. Selvom den oprindelige vejledning var for Xcode 6 og iOS 8, er principperne stadig relevante, og biblioteket understøtter moderne versioner af iOS og Xcode.

Grundlæggende Trin med SWRevealViewController:
- Download Biblioteket: Hent SWRevealViewController fra GitHub og ekstraher filerne "SWRevealViewController.h" og "SWRevealViewController.m". Tilføj disse filer til dit Xcode-projekt i en dedikeret gruppe.
- Storyboard Opsætning:
- I dit storyboard skal du ændre klassen for din initiale View Controller til
SWRevealViewController. - Opret en "reveal view controller set segue" fra
SWRevealViewControllertil din "rear" (menu) View Controller. - Opret en "reveal view controller push controller" segue fra
SWRevealViewControllertil din "front" (hovedindhold) View Controller. - Giv disse segues de korrekte identifikatorer: "sw_rear" for menuen og "sw_front" for hovedindholdet.
- I dit storyboard skal du ændre klassen for din initiale View Controller til
- Udvidelse og Kontraktion:
- I din "front" View Controller (f.eks. din hovedvisning), importer
SWRevealViewController.h. - I
viewDidLoad, sæt target for din "menu" knap (typisk enUIBarButtonItem) tilself.revealViewControllerog action til@selector(revealToggle:). - Tilføj
self.revealViewController.panGestureRecognizertil din hovedviews gestusgenkendere, så brugerne kan swipe for at åbne menuen.
- I din "front" View Controller (f.eks. din hovedvisning), importer
- Tilføjelse af Menupunkter:
- Din "rear" View Controller er typisk en
UITableViewController. Design din tabelvisning i storyboardet med de ønskede celler. - Giv hver prototype celle en unik identifier (f.eks. "news", "map", "comments").
- I
SidebarViewController.m(eller tilsvarende), implementertableView:cellForRowAtIndexPath:for at genbruge celler baseret på deres identifikatorer. - Definer en array af cellens identifikatorer i din
SidebarViewControllerfor nem adgang.
- Din "rear" View Controller er typisk en
- Håndtering af Valg af Menupunkter:
- I
prepareForSegue:metoden i din menu View Controller, identificer den valgte celle og dens tilknyttede segue. - Brug "reveal view controller push controller" segues til at navigere til forskellige View Controllers.
- Du kan sætte titlen på navigationslinjen eller overføre data til den destination View Controller baseret på det valgte menupunkt.
- I
Tabel: Sammenligning af Segue Typer i SWRevealViewController
| Segue Type | Formål | Typisk Brug |
|---|---|---|
SWRevealViewControllerSetSegue | Initialiserer SWRevealViewController med dens front- og rear-view controllers. | Forbindelse mellem den primære SWRevealViewController og de initiale front/rear views. |
SWRevealViewControllerPushController | Skubber en ny View Controller oven på front-view controlleren, mens sidebjælken forbliver skjult. | Navigation til en ny skærm efter valg af et menupunkt. |
SWRevealViewControllerSegue (Deprecated) | Ældre version af "push controller" segue. | Bør erstattes af SWRevealViewControllerPushController. |
Metode 2: SwiftUI og Programmatisk Implementering
Med introduktionen af SwiftUI er der nye og mere moderne måder at bygge brugergrænseflader på. Mens der ikke findes et direkte "SWRevealViewController"-ækvivalent i SwiftUI, kan man opnå en lignende effekt ved at kombinere NavigationView, HStack/ZStack og tilstandsvariabler.
Grundlæggende Trin med SwiftUI:
- Struktur:
- Opret en hoved-View, der indeholder både din sidebjælke-View og din hovedindholds-View.
- Brug en
ZStacktil at placere sidebjælken bag hovedindholdet. - Brug en
HStacktil at arrangere sidebjælken og hovedindholdet side om side.
- Tilstandsstyring:
- Brug en
@Statevariabel (f.eks.isSidebarVisible: Bool) til at styre, om sidebjælken er synlig. - En
Buttonmed et hamburger-ikon kan ændre værdien afisSidebarVisible.
- Brug en
- Animation og Overgange:
- Brug
.animation()modifieren til at skabe en flydende overgang, når sidebjælken vises eller skjules. - Du kan justere placeringen af hovedindholdet ved at ændre dets
.offset()baseret påisSidebarVisible.
- Brug
- Navigation:
- Inden i din hovedindholds-View kan du bruge
NavigationViewogNavigationLinks til at navigere til andre Views, når et menupunkt vælges. - For at lukke sidebjælken efter navigation kan du sætte
isSidebarVisibletilfalse.
- Inden i din hovedindholds-View kan du bruge
Eksempel på SwiftUI Struktur:
struct ContentView: View { @State private var isSidebarVisible = false var body: some View { ZStack { // Sidebjælke (Menu) SidebarView(isSidebarVisible: $isSidebarVisible) // Hovedindhold NavigationView { MainContentView(isSidebarVisible: $isSidebarVisible) .navigationBarItems(leading: Button(action: { isSidebarVisible.toggle() }) { Image(systemName: "line.horizontal.3") }) } .shadow(radius: isSidebarVisible ? 15: 0) .offset(x: isSidebarVisible ? UIScreen.main.bounds.width * 0.7: 0) .animation(.spring()) } } } struct SidebarView: View { @Binding var isSidebarVisible: Bool var body: some View { HStack { MenuView() Spacer() } .frame(width: UIScreen.main.bounds.width * 0.8) .background(Color.gray.opacity(0.8)) .edgesIgnoringSafeArea(.all) } } struct MainContentView: View { @Binding var isSidebarVisible: Bool var body: some View { VStack { Text("Hovedindhold") // NavigationLinks her... } .frame(maxWidth: .infinity, maxHeight: .infinity) .background(Color.white) .onTapGesture { if isSidebarVisible { isSidebarVisible = false } } } } struct MenuView: View { var body: some View { List { Text("Hjem") Text("Indstillinger") Text("Profil") } .listStyle(PlainListStyle()) } } Metode 3: Programmatisk Implementering uden Biblioteker (Swift)
For udviklere, der ønsker fuld kontrol eller at undgå tredjepartsafhængigheder, er det muligt at implementere en sidebjælke programmatisk. Dette involverer typisk at håndtere container-Views, gestusgenkendere og animationer manuelt.

Grundlæggende Trin:
- Container ViewController: Opret en
UIViewController(f.eks.ContainerViewController), der vil styre både hovedindholdet og menuen. - Tilføjelse af Views: Tilføj din hovedindholds-View Controller (f.eks.
HomeViewController) og din menu-View Controller (MenuViewController) som child View Controllers. - Gestusgenkendelse: Implementer en
UISwipeGestureRecognizerpå hovedindholdet for at udløse menuen. EnUITapGestureRecognizerkan bruges til at lukke menuen ved at trykke på hovedindholdet. - Animation: Brug
UIView.animatetil at animere placeringen af hovedindholds-Viewet for at afsløre eller skjule menuen. Dette kan involvere at ændreframe.origin.x. - Delegation: Brug delegation-mønsteret til at kommunikere mellem menuen og hovedindholdet (f.eks. når et menupunkt vælges).
Tabel: Vigtige Komponenter for Programmatisk Implementering
| Komponent | Rolle |
|---|---|
ContainerViewController | Orkestrerer visningen og interaktionen mellem menu og indhold. |
MenuViewController | Indeholder selve menuen, typisk en UITableView. |
HomeViewController (eller lignende) | Viser appens hovedindhold. |
UISwipeGestureRecognizer | Registrerer swipes for at åbne/lukke menuen. |
UITapGestureRecognizer | Registrerer tryk på indholdet for at lukke menuen. |
UIView.animate | Skaber de flydende animationer for menuens bevægelse. |
UINavigationController | Bruges ofte til at indpakke hovedindholdet for at håndtere navigation. |
Ofte Stillede Spørgsmål (FAQ)
- Hvad er den bedste måde at implementere en sidebjælke på? Valget afhænger af dit projekt. SWRevealViewController er hurtig og nem for eksisterende projekter. SwiftUI tilbyder en mere moderne og integreret tilgang. Programmatisk giver mest kontrol.
- Kan jeg bruge en sidebjælke i et eksisterende projekt? Ja, SWRevealViewController er velegnet til dette. Med SwiftUI kan det kræve en større omskrivning af din UI.
- Hvordan håndterer jeg lukning af menuen ved tryk på indholdet? Tilføj en
UITapGestureRecognizertil din hovedindholds-View, der sætter en tilstandsvariabel til `false` (i SwiftUI) eller kalder en metode til at lukke menuen (i UIKit). - Hvordan sikrer jeg god performance? Brug effektive genbrugsmekanismer for celler (i tabelvisninger) og optimer animationerne. Undgå at indlæse for meget data i sidebjælken ad gangen.
Konklusion
Implementering af en sidebjælke-navigation er en effektiv måde at forbedre brugeroplevelsen og organiseringen af din iPhone-app. Uanset om du foretrækker den gennemprøvede metode med SWRevealViewController, den moderne tilgang med SwiftUI, eller fuld kontrol gennem programmatisk udvikling, er der en løsning, der passer til dine behov. Husk at teste din implementering grundigt på forskellige enheder for at sikre, at den fungerer problemfrit og intuitivt for dine brugere.
Hvis du vil læse andre artikler, der ligner Skjul og vis en sidebjælke på din iPhone, kan du besøge kategorien Mobilapps.
