Is there a slide menu navigation for iOS?

Skjul og vis en sidebjælke på din iPhone

11/07/2024

Rating: 4.5 (15259 votes)
Indholdsfortegnelse

Implementering af en Sidebjælke-navigation på iPhone

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.

What is a slide-out sidebar in Facebook app?
The slide-out sidebar design, which Facebook app introduced, has become a standard way to implement navigation menus in apps. This design pattern is commonly found in popular content-related apps like Path, Mailbox, and Gmail.

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.

Fordele ved Sidebjælke-navigation

  • 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.

How do I show a sidebar on my iPhone?
Shows content with a top left Menu (iPad in portrait or iPhone Pro Max in landscape). Shows Sidebar and content next to each other (iPad in landscape). In this mode, you can toggle to show or hide the Sidebar using the Navigation Bar.

Grundlæggende Trin med SWRevealViewController:

  1. 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.
  2. 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 SWRevealViewController til din "rear" (menu) View Controller.
    • Opret en "reveal view controller push controller" segue fra SWRevealViewController til din "front" (hovedindhold) View Controller.
    • Giv disse segues de korrekte identifikatorer: "sw_rear" for menuen og "sw_front" for hovedindholdet.
  3. 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 en UIBarButtonItem) til self.revealViewController og action til @selector(revealToggle:).
    • Tilføj self.revealViewController.panGestureRecognizer til din hovedviews gestusgenkendere, så brugerne kan swipe for at åbne menuen.
  4. 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), implementer tableView:cellForRowAtIndexPath: for at genbruge celler baseret på deres identifikatorer.
    • Definer en array af cellens identifikatorer i din SidebarViewController for nem adgang.
  5. 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.

Tabel: Sammenligning af Segue Typer i SWRevealViewController

Segue TypeFormålTypisk Brug
SWRevealViewControllerSetSegueInitialiserer SWRevealViewController med dens front- og rear-view controllers.Forbindelse mellem den primære SWRevealViewController og de initiale front/rear views.
SWRevealViewControllerPushControllerSkubber 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:

  1. Struktur:
    • Opret en hoved-View, der indeholder både din sidebjælke-View og din hovedindholds-View.
    • Brug en ZStack til at placere sidebjælken bag hovedindholdet.
    • Brug en HStack til at arrangere sidebjælken og hovedindholdet side om side.
  2. Tilstandsstyring:
    • Brug en @State variabel (f.eks. isSidebarVisible: Bool) til at styre, om sidebjælken er synlig.
    • En Button med et hamburger-ikon kan ændre værdien af isSidebarVisible.
  3. 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.
  4. Navigation:
    • Inden i din hovedindholds-View kan du bruge NavigationView og NavigationLinks til at navigere til andre Views, når et menupunkt vælges.
    • For at lukke sidebjælken efter navigation kan du sætte isSidebarVisible til false.

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.

How do I show a sidebar on my iPhone?
Shows content with a top left Menu (iPad in portrait or iPhone Pro Max in landscape). Shows Sidebar and content next to each other (iPad in landscape). In this mode, you can toggle to show or hide the Sidebar using the Navigation Bar.

Grundlæggende Trin:

  1. Container ViewController: Opret en UIViewController (f.eks. ContainerViewController), der vil styre både hovedindholdet og menuen.
  2. Tilføjelse af Views: Tilføj din hovedindholds-View Controller (f.eks. HomeViewController) og din menu-View Controller (MenuViewController) som child View Controllers.
  3. Gestusgenkendelse: Implementer en UISwipeGestureRecognizer på hovedindholdet for at udløse menuen. En UITapGestureRecognizer kan bruges til at lukke menuen ved at trykke på hovedindholdet.
  4. Animation: Brug UIView.animate til at animere placeringen af hovedindholds-Viewet for at afsløre eller skjule menuen. Dette kan involvere at ændre frame.origin.x.
  5. 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

KomponentRolle
ContainerViewControllerOrkestrerer visningen og interaktionen mellem menu og indhold.
MenuViewControllerIndeholder selve menuen, typisk en UITableView.
HomeViewController (eller lignende)Viser appens hovedindhold.
UISwipeGestureRecognizerRegistrerer swipes for at åbne/lukke menuen.
UITapGestureRecognizerRegistrerer tryk på indholdet for at lukke menuen.
UIView.animateSkaber 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 UITapGestureRecognizer til 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.

Go up